2012-09-15 29 views
3

我奋力如何正确允许破折号/ hypens在我的MVC 4/ASP.NET 4.5应用程序的URL ...出于某种原因MVC破折号转换为下划线这不是我想要的。ASP.NET MVC 4 - 允许破折号/在hypens URL的

我做之前,我张贴的问题,仍无法找到任何简单的解决方案摸索好位。我发现的一切似乎都是为了这样一个简单的配置。

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

www.mysite.com/dashes-in-url

因此,例如,我创建了一个名为控制器:

破折号功能于urlController.cs

控制器被评为优良,并允许在控制器名破折号。

然而,当我创建用于索引的视图用于上述控制器,它创建的视图为:

文件夹:/查看/ dashes_in_url

随着该文件夹中的文件Index.cshtml - 但它用下划线代替了我的破折号。

所以我要访问的网址为:

www.mysite.com/dashes_in_url

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

有谁知道任何优雅的,简单的解决方案,以达到我想要做什么?

在这个问题上的任何帮助将不胜感激,谢谢!

+0

愚蠢的问题......你有没有尝试重命名你的观点,如“划线功能于url.cshtml”? –

+1

你需要实现一个HyphenatedRouteHandler - 幸运的是,很多人已经完成了这个工作,所以在这里签出接受的答案http://stackoverflow.com/questions/2070890/asp-net-mvc-support-for-urls-with-hyphens或搜索谷歌HyphenatedRouteHandler更多的例子 – bUKaneer

回答

6

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

虚线网址是更加搜索引擎友好,更易于阅读。 (More on my blog post

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

要安装它,只需右键打开在Visual Studio中的NuGet窗口单击项目并选择NuGet包管理器,在“网上”标签式“小写线虚线路线“,它应该弹出。

或者,也可以在Package Manager控制台运行这段代码

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() 
) 
); 

就是这样。所有的网址都是小写字母,虚线,并且隐式转换,而不需要做更多的事情。

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

+1

完美的包好友。谢谢! –

+0

不客气! –

+0

当我使用javascript引用诸如window.location.href =“/ MyController/Index/Id/ArbitraryText”之类的地址时,控制器不会破碎。我怎样才能解决这个问题? –