web-dev-qa-db-ja.com

ASP.NET MVC URLルートサポート(ドット)

以下の問題を解決していただければ幸いです。

IIS7でASP.NET MVC 3を使用していますが、アプリケーションでドット付きのユーザー名をサポートする必要があります。

例: http://localhost/john.lee

これは私のGlobal.asaxがどのように見えるかです:( http:// localhost / {username})

routes.MapRoute(
    "UserList",
    "{username}",
    new { controller = "Home", action = "ListAll" }
);

http://localhost/john.lee/details などの他のページにアクセスすると、アプリケーションは機能します。

しかし、メインのユーザーページは機能しません。 http://www.facebook.com/john.lee がサポートされているFacebookのようにアプリを機能させたいです。

以下のコードを使用しましたが、まったく機能しませんでした。

<httpRuntime relaxedUrlToFileSystemMapping="true" />

以下のコードを使用してアプリでドットを受け入れることができましたが、さまざまな理由で以下のコードを使用したくありません。この問題を解決する方法があることを教えてください。

<modules runAllManagedModulesForAllRequests="false" />
36
Cindro

私は同じ問題に直面していました。だから私にとって最善の解決策は:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"></modules>
<system.webServer>
1
Satish Singh

UrlRoutingHandlerをweb.configに追加します。ただし、URLをもう少し具体的にする必要があります(/Users/john.leeなど)。これにより、/ Usersで始まるすべてのURLがMVC URLとして扱われるようになります。

<system.webServer>    
  <handlers>      
    <add name="UrlRoutingHandler" 
         type="System.Web.Routing.UrlRoutingHandler, 
               System.Web, Version=4.0.0.0, 
               Culture=neutral, 
               PublicKeyToken=b03f5f7f11d50a3a" 
         path="/Users/*" 
         verb="GET"/>      
  </handlers>
</system.webServer>
59
Klaas Coenraads

このセクションをWeb.configに追加するだけで、pathInfoにドットがある場合でも、route/{* pathInfo}へのすべての要求が指定されたハンドラーによって処理されます。 (ServiceStack MVCホストのWeb.configの例とこの回答から取得 https://stackoverflow.com/a/12151501/801189

これは、IIS 6&7の両方で機能するはずです。「add」要素のpath = "*"を変更することで、「route」の後に特定のハンドラーを異なるパスに割り当てることができます。

  <location path="route">
    <system.web>
      <httpHandlers>
        <add path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" />
      </httpHandlers>
    </system.web>
    <!-- Required for IIS 7.0 -->
    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true" />
      <validation validateIntegratedModeConfiguration="false" />
      <handlers>
        <add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" />
      </handlers>
    </system.webServer>
  </location>
4
V.B.

UrlRoutingHandlerアプローチを使用しているときに「抽象クラスを作成できません」例外が発生する場合は、次の原因が考えられます。

  • 制限された「パス」の使用(例:path="/Files/*")をweb.config宣言で
  • 同じ名前のフォルダー/パスがプロジェクトに存在します
1
Mark

ここではドットが問題だとは思いません。私の知る限り、ユーザー名に含めてはならない唯一の文字は/

john.lee/detailsに一致するルートが表示されない場合、何が問題なのかを言うのは難しいですが、URLに一致する別のルートがあり、ユーザーの詳細ルートが正しく一致しないと思います。

Glimpse のようなツールを使用して、どのルートが一致しているかを把握することをお勧めします。

0