我希望你能帮我解决下面的问题。
我在 IIS7 上使用 ASP.NET MVC 3,并希望我的应用程序支持带点的用户名。
这就是我的 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 回答
我面临同样的问题。所以对我来说最好的解决方案是:
将 UrlRoutingHandler 添加到 web.config。这需要您的网址更具体一些(f.e./Users/john.lee)。这会强制每个以/Users 开头的 url 被视为 MVC url:
只需将此部分添加到 Web.config,并且对路径/ {* pathInfo}的所有请求都将由指定的处理程序处理,即使 pathInfo 中有点也是如此。 (取自 ServiceStack MVC Host Web.config 示例和此答案https://stackoverflow.com/a/12151501/801189)
这应该适用于 IIS 6 和 7.您可以通过修改'add'元素中的 path =“*”将特定处理程序分配到'route'之后的不同路径
对于在使用
UrlRoutingHandler
方法时获得“无法创建抽象类”异常的任何人,可能是由于:在 web.config 声明中使用受限制的“路径”(e.g .
path="/Files/*"
),和项目中存在具有相同名称的 folder/path
我认为点不是问题所在。 AFAIK 唯一不应该在用户名中的字符是/
没有看到匹配
john.lee/details
的路线很难说出错了,但我猜你有另一条匹配网址的路由,阻止用户详细信息路由被正确匹配。我建议使用像一瞥这样的工具来确定匹配的路线。