我有一个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。