首页 文章

ASP.NET MVC Url 路由支持(点)

提问于
浏览
35

我希望你能帮我解决下面的问题。

我在 IIS7 上使用 ASP.NET MVC 3,并希望我的应用程序支持带点的用户名。

示例:http://localhost/john.lee

这就是我的 Global.asax 的样子:(http://localhost/ {})

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" />

5 回答

  • 1

    我面临同样的问题。所以对我来说最好的解决方案是:

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"></modules>
    <system.webServer>
    
  • 58

    将 UrlRoutingHandler 添加到 web.config。这需要您的网址更具体一些(f.e./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>
    
  • 4

    只需将此部分添加到 Web.config,并且对路径/ {* pathInfo}的所有请求都将由指定的处理程序处理,即使 pathInfo 中有点也是如此。 (取自 ServiceStack MVC Host 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>
    
  • 1

    对于在使用UrlRoutingHandler方法时获得“无法创建抽象类”异常的任何人,可能是由于:

    • 在 web.config 声明中使用受限制的“路径”(e.g .path="/Files/*"),和

    • 项目中存在具有相同名称的 folder/path

  • 0

    我认为点不是问题所在。 AFAIK 唯一不应该在用户名中的字符是/

    没有看到匹配john.lee/details的路线很难说出错了,但我猜你有另一条匹配网址的路由,阻止用户详细信息路由被正确匹配。

    我建议使用像一瞥这样的工具来确定匹配的路线。

相关问题