6

我已经看到 IIS 在让冒号进入 URL 方面存在问题。我还看到了其他人在这里提供的建议。

在我正在开发的网站上,我希望能够将电影、书籍等的标题传递到我的 URL 中,包括冒号,如下所示:

mysite.com/Movie/Bob:The Return

例如,这将被 myMovieController用作字符串并在后面使用。

我意识到冒号并不理想。有没有人有任何其他建议?尽管目前很糟糕,但我正在从所有冒号 (:) 到另一个字符进行查找和替换,然后当我想在 Controller 端使用它时进行反向替换。

4

5 回答 5

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 的默认值中。

于 2013-09-11T13:11:47.000 回答
3

考虑对电影标题进行URL 编码和解码。

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

作为替代方案,请考虑利用HTML 帮助程序来删除 URL 中的 URL 不友好字符(方法是URLFriendly())。冒号和占位符(例如破折号)之间的 SEO 好处可能可以忽略不计。

于 2011-01-14T19:04:09.300 回答
2

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

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

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

URL 中的 ASP.NET MVC 冒号

URL 中的 ASP.NET MVC 冒号

于 2011-01-14T19:02:12.247 回答
0

根据RFC 3986,冒号是 URI 中保留的无效字符。所以不要做违反规范的事情。您需要对其进行 URL 编码或使用其他字符。这是一篇不错的博文,您可以看看。

于 2011-01-14T18:56:59.457 回答
0

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

于 2011-01-14T19:02:10.877 回答