4

我正在努力如何在我的 MVC 4 / ASP.NET 4.5 应用程序的 URL 中正确允许破折号/连字符...由于某种原因,MVC 将破折号转换为下划线,这不是我想要的。

在发布问题之前,我已经做了很多搜索,仍然找不到任何简单的解决方案。对于这样一个简单的配置,我发现的一切似乎都不合时宜。

基本上,我希望能够访问以下 URL:

www.mysite.com/dashes-in-url

例如,我创建了一个名为:

破折号-in-urlController.cs

控制器被命名为罚款,并允许控制器名称中的破折号。

但是,当我为上述控制器创建索引视图时,它创建的视图为:

文件夹:/Views/dashes_in_url

在该文件夹中有一个 Index.cshtml 文件 - 但它用下划线替换了我的破折号。

所以我必须访问网址:

www.mysite.com/dashes_in_url

用下划线代替 URL 中的破折号。

有谁知道任何优雅、简单的解决方案来实现我想要做的事情?

非常感谢您对此事的任何帮助,谢谢!

4

1 回答 1

7

我为这个问题开发了一个开源NuGet 库,它隐式地将 EveryMvc/Url 转换为 every-mvc/url。

虚线 URL 对 SEO 更友好且更易于阅读。(更多关于我的博客文章

NuGet 包:https ://www.nuget.org/packages/LowercaseDashedRoute/

要安装它,只需在 Visual Studio 中打开 NuGet 窗口,方法是右键单击项目并选择 NuGet 包管理器,然后在“在线”选项卡上键入“小写虚线”,它应该会弹出。

或者,您可以在包管理器控制台中运行此代码:

Install-Package LowercaseDashedRoute

之后,您应该打开 App_Start/RouteConfig.cs 并注释掉现有的 route.MapRoute(...) 调用并添加以下内容:

routes.Add(new LowercaseDashedRoute("{controller}/{action}/{id}",
  new RouteValueDictionary(
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
    new DashedRouteHandler()
  )
);

而已。所有的 url 都是小写、虚线和隐式转换,而无需您做任何其他事情。

开源项目网址:https ://github.com/AtaS/lowercase-dashed-route

于 2013-08-03T11:54:23.303 回答