Eri*_*ham 29 arguments asp.net-mvc-routing asp.net-mvc-2
我有一个MVC路由,它让我在运行IIS的登台服务器上下地狱.我在本地运行Visual Studio 2010的开发服务器.
这是一个实际在我的开发箱上工作的示例网址:
Root/CPUBoards/Full+Size
Results
Server Error404 - File or directory not found.
The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.
Run Code Online (Sandbox Code Playgroud)
这是我看到的完整行为.
本地主机:
Root/CPUBoards/Full Size - Resolves
Root/CPUBoards/Full%20Size - Resolves
Root/CPUBoards/Full+Size - Resolves
Run Code Online (Sandbox Code Playgroud)
使用IIS 7.0临时服务器:
Root/CPUBoards/Full Size - Resolves
Root/CPUBoards/Full%20Size - Resolves
Root/CPUBoards/Full+Size - 404 Not Found Error.
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我需要使用编码版本有几个原因...不会浪费你的时间.
HttpUtility.UrlEncode("Full Size")返回带有加号的版本... Full + Size.这适用于我的开发箱,但不适用于登台服务器.我宁愿让它在服务器上工作,因为我已经测试了所有其他工作并在本地工作,但我不知道从哪里开始查看服务器配置以使其行为方式相同.
谢谢!
bob*_*nce 20
+仅具有在application/x-www-form-urlencoded数据中作为空格的特殊含义,例如URL的查询字符串部分.
在URL的其他部分(如路径组件)中,+字面意思是加号.因此解析Full+Size未编码的名称Full Size不应该在任何地方工作.
路径组件中唯一正确的空间形式是%20.(当您键入实际空间时,它仍然有效,因为浏览器会发现错误并为您纠正错误.)%20也适用于表单URL编码数据,因此始终使用它通常最安全.
可悲的HttpUtility.UrlEncode是,这是一个误导性的名字.它+在输出中产生而不是%20,因此它实际上是一个表单URL编码器而不是标准的URL编码器.不幸的是我不知道的ASP.NET功能对路径使用到"真正的URL编码"字符串,所以我只能建议是做一个字符串替换+到%20编码后.
或者,避免在路径部分中使用空格,例如.用它们代替它们-.将'slug'标题插入到URL中是很常见的,将它们简化为简单的字母数字和"安全"标点符号,以避免用丑陋的%nn序列填充URL .
spl*_*tne 20
这是一个IIS安全设置.有一个标准请求筛选器拒绝包含+(加号)字符的URL.
您可以为您的网站禁用它,将其添加到您的web.config:
<configuration>
...
<system.webServer>
...
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
...
</configuration>
Run Code Online (Sandbox Code Playgroud)