将查询字符串传递给404页面

时间:2012-03-30 20:22:37

标签: asp.net iis-7 error-handling http-status-code-404

我在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,所以这证实它绝对没有被传递。

1 个答案:

答案 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