我已经看到IIS将冒号放入网址存在问题。我也看到了其他人提出的建议here。
通过我正在处理的网站,我希望能够将电影,书籍等标题传递到我的网址,包含冒号,如下所示:
mysite.com/Movie/Bob:The Return
这将由我的MovieController
使用,例如,作为一个字符串并在线下进一步使用。
我意识到结肠不理想。有没有人有任何其他建议?与目前一样糟糕,我正在从所有冒号(:)到另一个角色进行查找和替换,然后当我想在Controller端使用它时向后替换。
答案 0 :(得分:7)
我通过将此问题添加到我的web.config中解决了这个问题:
<httpRuntime requestPathInvalidCharacters=""/>
这必须在system.web部分内。
默认为:
<httpRuntime requestPathInvalidCharacters="<,>,*,%,&,:,\,?"/>
所以只为冒号做一个例外,它会成为
<httpRuntime requestPathInvalidCharacters="<,>,*,%,&,\,?"/>
根据我的理解,冒号字符可以作为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友好的电影名称副本,但你不必担心回到原始标题中包含所有非法字符。
一个很好的例子是这个页面的网址。您可以看到删除页面标题仍然有效:
答案 3 :(得分:0)
根据RFC 3986,冒号是URI中的保留字符和无效字符。所以不要做违反规范的事情。您需要对其进行URL编码或使用其他字符。这是nice blog post你可能会看一下。
答案 4 :(得分:0)
最简单的方法是在构建url时使用System.Web.HttpUtility.UrlEncode() 和解释返回结果时的System.Web.HttpUtility.UrlDecode。如果不首先对值进行编码,则空格字符也会出现问题。