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

添加一个UrlRoutingHandler到web.config。 这需要你的url更具体一些(fe /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> 

只需将此部分添加到Web.config中,即使path信息中有点,所有对路由/ {* pathInfo}的请求都将由指定的处理程序处理。 (取自ServiceStack MVC主机Web.config示例和此答案https://stackoverflow.com/a/12151501/801189

这应该适用于IIS 6和7.您可以在“路由”之后通过修改“add”元素中的path =“*”,将特定的处理程序分配到不同的path

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

我不认为这个问题在这里是问题。 AFAIK唯一不应该在用户名中的字符是a /

没有看到与john.lee/details相匹配的路由,很难说出了什么问题,但是我猜测你有另外一个匹配url的路由,阻止了用户细节路由的正确匹配。

我build议使用像Glimpse这样的工具来找出匹配的路线。