asp.net-mvc - 包含 <space> 和正斜杠的路由

标签 asp.net-mvc routes asp.net-mvc-routing routeconfig

我们的路线定义为

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
            }

但是,如果文本包含正斜杠的前导空格,则这没有帮助,例如item/1 导致 IIS 返回 404 错误。

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

最佳答案

空格(以及大多数其他特殊字符)必须经过 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 编码信息是路径的一部分时,某些防火墙和服务器无法正确解释它,但查询字符串信息更可靠。更不用说上面文章中提到的安全问题了。

或者,您可以设计 URL 以用不安全字符替换安全字符...

/search/for/some-text

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

但是无论您如何解决它,URL 首先也是最重要的是要使机器可读,您在设计 URL 时必须考虑到这一点。

关于asp.net-mvc - 包含 <space> 和正斜杠的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45998667/

相关文章:

ruby-on-rails - 简单的 Ruby on Rails 应用程序

node.js - 保护 NodeJS 的 post 路由

asp.net-mvc - ASP.NET MVC 区域路由

asp.net-mvc - Controller 继承 : how to override controller's action and force using new action when Html. 调用操作

c# - 在 C# (ASP.MVC) 中将 Access DB (.mdb) 与 ADODB 一起使用,就像使用经典 ASP

asp.net-mvc - 设计选择 : WCF or Service Stack?

asp.net-mvc - 在 asp.net mvc 中升级到 bootstrap 4 CSS minifier 中断

asp.net-mvc - Razor @helper函数不呈现任何HTML

c# - 在 WebAPI 帖子中发现了多项操作 - 为什么这不起作用?

asp.net-mvc - MVC路由触发时在 Controller 中获取空参数值