我在IIS 7中设置了错误处理以转发到404页面,但查询字符串似乎从未被传递过。
例如,此页面不存在,因此它指向404页面:
www.mysite.com/nonexistingpage.aspx?id=1
在404页面的page_load中,我无法访问id = 1,因为它似乎无法访问404页面。因此,尝试使用这些方法获取它不起作用:
Request.UrlReferrer.PathAndQuery
Request.ServerVariables["HTTP_REFERER"]
在IIS中,我的路径输入为:/404.aspx,Type设置为:执行URL。如何确保查询字符串将传递到404页面?
编辑:在Fiddler中,重定向是:/404.aspx?aspxerrorpath = / nonexistingpage.aspx,所以这证实它绝对没有被传递。
答案 0 :(得分:1)
您使用的是ASP.NET错误页面还是IIS错误页面?从您在Fiddler中讨论重定向的事实来看,我认为您使用的是ASP.NET错误页面,但ExecuteURL建议您使用IIS错误页面。或者也许你把两者都与ASP.NET结合起来。
最佳选择是为404页面使用IIS错误页面。这可以让你做你想做的事:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors>
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/404.aspx" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
</configuration>
现在,当您的非现有页面调用/404.aspx
时,查询字符串将设置为:
404;http://www.mysite.com/nonexistingpage.aspx?id=1