.NET 4.5 MVC RouteCollection.LowercaseUrls 在使用区域时中断
Posted
技术标签:
【中文标题】.NET 4.5 MVC RouteCollection.LowercaseUrls 在使用区域时中断【英文标题】:.NET 4.5 MVC RouteCollection.LowercaseUrls breaks when using Area 【发布时间】:2012-10-27 14:05:53 【问题描述】:在 .NET Framework 4.5 中添加了 RouteCollection 的新属性:
http://msdn.microsoft.com/en-us/library/system.web.routing.routecollection.lowercaseurls.aspx
这很好用,直到您将一个区域添加到您的项目中。所有的 Url 都是正确的。
任何想法为什么会发生这种情况?复制很简单:
-
创建新的 MVC 4 Internet 应用程序 (.NET 4.5)
使用以下命令启动 RouteConfig.RegisterRoutes 函数:routes.LowercaseUrls = true;
运行项目,您会看到所有生成的 Url 现在都是小写的。
为项目添加一个区域。
再次运行该项目,您将看到所有 Url 再次都是正确的!
它在 context.MapRoute 在 AreaRegistration.RegisterArea 中执行时中断。当我将其注释掉时,我得到了小写的 Urls。取消注释它,正确的 Urls 又回来了。
在我看来,微软知道这是错误的并且没有宣传这个新功能,因为它是一个非常棒的功能,但它只在 MSDN 文档中提到。
【问题讨论】:
我也遇到了同样的问题,得出的结论是,如果您想要小写 URL,请不要使用区域(直到修复出现!)。 你可以看看这个:nuget.org/packages/LowercaseRoutesMVC 【参考方案1】:这确实似乎是 ASP.NET MVC 和 ASP.NET 4.5 的路由中新的 LowercaseUrls 功能之间的交互中的一个错误。
我在这里记录了一个 MVC 错误:http://aspnetwebstack.codeplex.com/workitem/685
感谢您报告此事!
正如 Cristi Pufu 所提到的,其他人似乎已经编写了一些 NuGet 包来处理类似的场景:
http://nuget.org/packages/LowercaseRoutesMVC - 添加对小写 URL 的支持 http://nuget.org/packages/AttributeRouting - 为大量简洁的功能添加了超级精美的支持,包括小写 URL(参见 https://github.com/mccalltd/AttributeRouting/wiki/Generating-Lowercase-Outbound-URLs)编辑 2013 年 4 月 23 日 - 我们最近接受了一个拉取请求,其中包含针对 ASP.NET MVC 5 的此问题的修复。
【讨论】:
为什么不在 MVC 4 上推出它以上是关于.NET 4.5 MVC RouteCollection.LowercaseUrls 在使用区域时中断的主要内容,如果未能解决你的问题,请参考以下文章
与 MVC 3、.NET 4.5 和 EF 6 并行获取数据
HTTP 错误 403.14 - 禁止 - MVC4 .net 4.5 捆绑包