我们有一条定义为
的路线routes.MapRoute(
name: "SearchFor",
url: "Search/For/{text}",
defaults: new
{
controller = "Search",
action = "For",
text = UrlParameter.Optional
}
在新客户的数据恰好包含大量正斜杠后,我们遇到text
问题,例如item/1
。为了解决这个问题,路线已经更新,包括一个捕获全部如下
routes.MapRoute(
name: "SearchFor",
url: "Search/For/{*text}",
defaults: new
{
controller = "Search",
action = "For",
text = UrlParameter.Optional
}
但是,如果text
包含正斜杠的前导空格,则无效item /1
导致IIS返回404错误。
是否可以在不以某种方式编码text参数的情况下解决此问题?
答案 0 :(得分:2)
空格(以及大多数其他特殊字符)必须经过URL编码才能在URL路径中使用。但是,这是一种不好的做法,应该避免。请参阅(Please) Stop Using Unsafe Characters in URLs。
更好的方法是将查询字符串与不安全字符的URL编码结合使用。
routes.MapRoute(
name: "SearchFor",
url: "Search",
defaults: new
{
controller = "Search",
action = "For"
}
用得像......
/search?text=Some%20Text
某些防火墙和服务器在路径的一部分时无法正确解释URL编码信息,但查询字符串信息更可靠。更不用说上面文章中提到的安全问题了。
或者,您可以设计自己的网址,将不安全字符替换为安全字符...
/search/for/some-text
...但是需要更多考虑覆盖您特定用例的所有特殊情况。从本质上讲,您的应用程序需要足够智能,以便将安全字符转换为不安全的字符。
但是无论你如何解决它,首先要使URL成为机器可读的,你必须在设计它时考虑到这一点。