路由包含<space>和正斜杠



我们的路线定义为

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错误。

是否可以在不以某种方式编码文本参数的情况下解决此问题?

空格(以及大多数其他特殊字符)必须编码URL,以便在URL路径中使用。但是,这是一种不好的做法,应该避免。请参阅(请)停止使用URL中的不安全字符。

一种更好的方法是将查询字符串与不安全字符的URL编码结合使用。

routes.MapRoute(
        name: "SearchFor",
        url: "Search",
        defaults: new
        {
            controller = "Search",
            action = "For"
        }

和像...

一样
/search?text=Some%20Text

某些防火墙和服务器在路径的一部分时无法正确解释URL编码的信息,但是查询字符串信息更可靠。更不用说上述文章中指出的安全问题。

另外,您可以设计自己的URL来代替不安全的字符来安全的字符...

/search/for/some-text

...但这将需要更多考虑来涵盖您特定用例的所有特殊情况。本质上,您的应用程序需要足够聪明才能将安全角色转换为不安全的字符。

但是,但是您解决了,URL首先是机器可读的,并且在设计它们时必须考虑到它。

相关内容

  • 没有找到相关文章

最新更新