.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 并行获取数据

跟我一起学习ASP.NET 4.5 MVC4.0

MVC 5 (.NET 4.5) 应用程序的最佳 ORM

HTTP 错误 403.14 - 禁止 - MVC4 .net 4.5 捆绑包

.NET 4.5 MVC RouteCollection.LowercaseUrls 在使用区域时中断

Response.WriteFile() - 不工作 asp net mvc 4.5