asp.net-mvc-2 – Plus()在MVC中的参数引起404在IIS 7.0

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-2 – Plus()在MVC中的参数引起404在IIS 7.0前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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.

这是我看到的完整的行为。

本地主机:

Root/cpuBoards/Full Size - Resolves
Root/cpuBoards/Full%20Size - Resolves
Root/cpuBoards/Full+Size - Resolves

使用IIS 7.0的分段服务器:

Root/cpuBoards/Full Size - Resolves
Root/cpuBoards/Full%20Size - Resolves
Root/cpuBoards/Full+Size - 404 Not Found Error.

有任何想法吗?我需要使用编码版本有几个原因…不会浪费你的时间与他们。

HttpUtility.UrlEncode(“Full Size”)返回带有plus sing … Full Size的版本。这在我的dev盒子上,但不在临时服务器上。我宁愿只是让它在服务器上工作,因为我已经有一切测试和本地工作,但我不知道从哪里开始查找服务器配置,让它的行为方式相同。

谢谢!

解决方法

只有在application / x-www-form-urlencoded数据(例如URL的查询字符串部分)中作为空格的特殊含义。

在URL的其他部分,如路径组件,字面意思是加号。所以将Full Size解析为未编码的名称Full Size不应在任何地方工作。

路径组件中空间的唯一正确形式是。 (当你输入一个实际的空间时,仍然可以工作,因为浏览器发现错误并为你修正错误。)也可以在form-URL编码的数据中使用,所以通常最安全的是使用它。

可悲的是HttpUtility.UrlEncode是误导性的。它在其输出而不是生成,所以它真的是一个形式URL编码器,而不是一个标准的URL编码器。不幸的是,我不知道一个ASP.NET函数“真正的URL编码”字符串在路径中使用,所以我可以推荐在编码后做一个字符串替换。

或者,避免在路径部分中使用空格,例如。通过用 – 替换它们。将“插入”标题插入到URL中是很常见的,将它们缩减为简单的字母数字和“安全”标点符号,以避免使用丑陋的%nn序列填充URL。

猜你在找的asp.Net相关文章