URL中的ASP.NET MVC冒号

时间:2011-01-14 18:52:11

标签: asp.net-mvc url routing colon

我已经看到IIS将冒号放入网址存在问题。我也看到了其他人提出的建议here

通过我正在处理的网站,我希望能够将电影,书籍等标题传递到我的网址,包含冒号,如下所示:

mysite.com/Movie/Bob:The Return

这将由我的MovieController使用,例如,作为一个字符串并在线下进一步使用。

我意识到结肠不理想。有没有人有任何其他建议?与目前一样糟糕,我正在从所有冒号(:)到另一个角色进行查找和替换,然后当我想在Controller端使用它时向后替换。

5 个答案:

答案 0 :(得分:7)

我通过将此问题添加到我的web.config中解决了这个问题:

<httpRuntime requestPathInvalidCharacters=""/>

这必须在system.web部分内。

默认为:

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?"/>

所以只为冒号做一个例外,它会成为

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,\,?"/>

阅读详情:http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.requestpathinvalidcharacters.aspx

根据我的理解,冒号字符可以作为URL中未编码的字符。我不知道为什么他们将它添加到requestPathInvalidCharacters的默认值。

答案 1 :(得分:3)

考虑URL encoding and decoding您的电影名称。

你最终会得到foo.com/bar/Bob%58The%20Return

作为替代方案,请考虑利用HTML helper to remove URL unfriendly characters in URLs(方法为URLFriendly())。冒号和占位符(例如破折号)之间的SEO好处可能是可以忽略的。

答案 2 :(得分:2)

您的方法最大的担忧之一是电影名称并不总是唯一的(例如“The Italian Job”)。还有其他非法字符(例如括号等)。

在网址中使用ID号来定位数据库中的电影可能是个好主意。你仍然可以在你的网址中包含一个url友好的电影名称副本,但你不必担心回到原始标题中包含所有非法字符。

一个很好的例子是这个页面的网址。您可以看到删除页面标题仍然有效:

ASP.NET MVC Colon in URL

ASP.NET MVC Colon in URL

答案 3 :(得分:0)

根据RFC 3986,冒号是URI中的保留字符和无效字符。所以不要做违反规范的事情。您需要对其进行URL编码或使用其他字符。这是nice blog post你可能会看一下。

答案 4 :(得分:0)

最简单的方法是在构建url时使用System.Web.HttpUtility.UrlEncode() 和解释返回结果时的System.Web.HttpUtility.UrlDecode。如果不首先对值进行编码,则空格字符也会出现问题。