2010-08-22 72 views
0

我在IIS7上遇到错误的请求错误400。我在URL字符串中编码了特殊字符。我的URL看起来像这样(不喜欢%26):IIS7 .NET 3.5上的错误请求错误400

http://www.myjobs.com/a/q-Barnes+%26+Noble 

这将是,如果我是在.NET 4.0上运行一个简单的办法,但我对Rackspace的云,只能在IIS7运行。 NET 3.5。

这是我会在我的web.config中使用,如果我是在IIS7 .NET 4.0:在IIS7和.NET 3.5运行时

requestPathInvalidCharacters="" 

有没有什么其他选择?

+1

我遇到了类似的问题,在我的[SO问题](http://stackoverflow.com/questions/3536795/asp-net-mvc-search-criteria-as-route-parameter-in-stead-的-查询字符串-illega)。基本上在我的情况下,我不得不求助于查询字符串 - “http://www.myjobs.com/a?q = q-Barnes +%26 + Noble” – 2010-08-22 23:47:46

回答

0

您可以提出这样的请求的唯一方法是如果您更改注册表。 对于IIS在32位模式下运行,添加下面的DWORD键,如果你在64位模式下运行IIS其值设置为1个 HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ ASP.NET \ VerificationCompatibility

,添加以下DWORD键并将其值设置为1 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ ASP.NET \ VerificationCompatibility

不确定您的托管环境是否允许您访问该资料。我在IIS 7.5上测试了它,并能够使用如下编码的URL向/ Barnes & Noble/default.aspx发送请求:Response.Redirect(Server.UrlEncode(“Barnes & Noble”)+“/default.aspx” );

0

为什么要在URL中编码特殊字符?

为什么不将它们全部转换为更具搜索引擎友好性的表单,只有字母数字字符和短划线,并将该特殊表单存储在数据库中。或者,更容易的是,将该ID包含在URL中并使用后一部分,以使其易于人们阅读并且对搜索引擎友好:

例如, www.myjobs.com/a/1234/q-Barnes-and-noble

这种方法也意味着你可以稍后改变你的编码(也许增加一些新的特殊字符到alpha映射),并没有任何404的。