我希望你可以帮助我解决以下问题。
我在IIS7上使用ASP.NET MVC 3,并希望我的应用程序支持带点的用户名。
这就是我的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" />
答案 0 :(得分:58)
将UrlRoutingHandler添加到web.config。这需要你的url更具体一些(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>
答案 1 :(得分: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>
答案 2 :(得分:1)
我遇到了同样的问题。所以对我来说最好的解决方案是:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
<system.webServer>
答案 3 :(得分:1)
对于使用UrlRoutingHandler
方法时遇到“无法创建抽象类”异常的任何人,这可能是由于:
path="/Files/*"
),并且答案 4 :(得分:0)
我不认为这里有点问题。 AFAIK唯一不应该在用户名中的字符是/
如果没有看到匹配john.lee/details
的路由,则很难说出错了,但我猜测您有另一条与该网址匹配的路由,导致用户详细信息路由无法正确匹配。
我建议使用像Glimpse这样的工具来确定匹配的路线。