【问题标题】:ASP.NET MVC 4 - Allow dashes / hypens in URL'sASP.NET MVC 4 - 允许在 URL 中使用破折号/连字符
【发布时间】:2012-09-15 01:15:06
【问题描述】:

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

在发布问题之前,我已经进行了大量搜索,但仍然找不到任何简单的解决方案。对于这样一个简单的配置,我发现的所有东西都显得格格不入。

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

www.mysite.com/dashes-in-url

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

dashes-in-urlController.cs

控制器的名称很好,并且允许在控制器名称中使用破折号。

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

文件夹:/Views/dashes_in_url

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

所以我必须访问网址:

www.mysite.com/dashes_in_url

在 URL 中使用下划线而不是破折号。

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

在这件事上的任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 愚蠢的问题...您是否尝试将视图重命名为“dashes-in-url.cshtml”?
  • 你需要实现一个 HyphenatedRouteHandler - 谢天谢地很多人已经这样做了,所以在这里查看接受的答案stackoverflow.com/questions/2070890/… 或在谷歌搜索 HyphenatedRouteHandler 以获得更多示例

标签: asp.net-mvc url hyphenation


【解决方案1】:

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

虚线网址对 SEO 更友好且更易于阅读。 (More on my blog post)

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

【讨论】:

  • 完美的包裹伙伴。谢谢!
  • 当我使用 javascript 引用诸如 window.location.href = "/MyController/Index/Id/ArbitraryText" 之类的地址时,控制器没有虚线。我该如何解决这个问题?
  • 您能否发送示例代码让我看清楚问题?请在此处打开问题:github.com/AtaS/lowercase-dashed-route/issues
  • 关于这个包的另一个问题。当我输入 url localhost:5038/MyHomeAction 时效果很好。但是,如果我想使用不同的控制器,比如说我的控制器名称是 CodesController 并且我想去 localhost:5038/Codes 我得到一个 404,因为它似乎在 HomeController 中寻找动作“代码”而不是实现没有,然后点击 CodesController,然后点击此类控制器的 Index Action。
  • 对我来说,它不是那样的。例如,我有 AdminController,我可以通过输入 /admin 来输入它。甚至 Html.ActionLink() 也会生成 /admin 链接。对我来说,无论有没有小写虚线路线包,它的工作原理都是一样的。如果您认为仍然存在问题,您可以再举一个例子。
猜你喜欢
  • 2018-01-17
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 2011-07-13
相关资源
最近更新 更多