Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果路由值中的空格显示为'+';烧焦_C#_.net_Asp.net Mvc 4_Asp.net Routing - Fatal编程技术网

C# 如果路由值中的空格显示为'+';烧焦

C# 如果路由值中的空格显示为'+';烧焦,c#,.net,asp.net-mvc-4,asp.net-routing,C#,.net,Asp.net Mvc 4,Asp.net Routing,我面临以下问题。可能有人也发现了这种奇怪的行为 我的global.asax.cs中有以下路线定义: routes.Add(new Route("/module/{searchTerm}", new RouteValueDictionary { {"controller", "Module"}, {"action", "Index"} }, null, new MvcRouteHandler())); 所以,从第一个角度来看,没有什么特别的,但当空格作为+符号出现在搜索词中时,问题就出现了 例如

我面临以下问题。可能有人也发现了这种奇怪的行为

我的global.asax.cs中有以下路线定义:

routes.Add(new Route("/module/{searchTerm}", new RouteValueDictionary { {"controller", "Module"}, {"action", "Index"} }, null, new MvcRouteHandler()));
所以,从第一个角度来看,没有什么特别的,但当空格作为
+
符号出现在搜索词中时,问题就出现了

例如,我们尝试打开一个链接:

http://[myserver]/module/some%20search%20term
在这种情况下,一切正常,它会将我们重定向到正确的操作,但如果链接看起来像:

http://[myserver]/module/some+search+term
我收到一个错误,说明没有与提供的URL匹配的路由

顺便说一下,我不能在ASP.NET开发服务器上重现这个问题。它只出现在IIS上。可能有人确实有这样的问题?

  • URL路径部分中的百分比编码预期将被解码,但
  • 路径组件中的任何+字符都应按字面处理
明确地说:+只是查询组件中的一个特殊字符


(由2396和3986修改)定义了scheme(http:)、authority(//server.example.com)和path(/myfile/mypage.htm)组件,并且没有为+字符定义任何特殊含义。

+
符号是段的分隔符。分为方案、权限、路径和查询

2.2。保留字符

许多URI包含由、或由、分隔的组件 特殊字符。这些字符称为“保留”,因为
它们在URI组件中的使用仅限于保留的
目的。如果URI组件的数据与 保留目的,则冲突数据必须在 形成URI

  reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
                "$" | ","
上面的“保留”语法类指的是 在URI中允许,但在URI中可能不允许 通用URI语法的特定组件;它们被用作
第3节中描述的组件的分隔符

显然,这在卡西尼号上实施得很糟糕

  • 如果IIS设置中禁止双重转义,则URL的登录路径部分无效。这是请求筛选策略的一部分。但它可以在web.config中配置

当我在web.config中启用它时,一切都开始正常工作。

好的,你一定是对的,但为什么它在ASP.NET development server中工作?这就是问题所在…对于开发服务器,您是指通过IDE运行的本地IIS还是指IISExpress?它是Visual Studio附带的一个小型本地服务器。在这种情况下,您是指IISExpress,它为每个用户帐户都有自己的配置文件。有趣的是,它与成熟的IIS是同一个核心,所以在功能上它们应该是相同的。我不知道是什么原因造成了这种差异,但我会先查看
C:\Users\\Documents\IISExpress\config
,看看其中是否有什么原因。不,我甚至没有在我的计算机上安装IISExpress,我在Visual Studio ASP.NET开发服务器上测试了它。这意味着Cassini(请参阅)这将被IISExpress取代,因为它与IIS不同。