如何防止“aspxerrorpath”作为查询string传递给ASP.NET自定义错误页面

在我的ASP.NET Web应用程序中,我已经在web.config文件中定义了自定义错误页面,如下所示:

<customErrors mode="On" defaultRedirect="~/default.html"> <error statusCode="404" redirect="~/PageNotFound.html" /> </customErrors> 

在发生404错误的情况下,我的站点redirect到default.html页面,但它将“aspxerrorpath”作为查询stringparameter passing到自定义错误页面,如下所示:

 http://www.example.com/default.html?aspxerrorpath=/somepathcausederror/badpage.aspx 

我不想要这样的行为。 我希望redirecturl只读:

 http://www.example.com/default.html 

有没有办法做到这一点?

我的第一个想法是创build一个HttpHandler,它捕获url中的aspxerrorpath ,并将其aspxerrorpath 。 你也可以在IIS7中重写模块。

如果在指定path时提供自己的查询stringvariables,那么.NET将不会粘贴“aspxerrorpath”。 谁知道?

例如:

 <customErrors mode="On" defaultRedirect="errorpage.aspx?error=1" > 

这将做的伎俩。 我不得不将这个添加到一堆应用程序,因为默认情况下,URLScan for IIS会拒绝任何带有“aspxerrorpath”的东西。

在global.asax中,捕获404错误并redirect到文件未find的页面。 我不需要aspxerrorpath,它为我工作。

 void Application_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError(); if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 404) { Response.Redirect("~/filenotfound.aspx"); } else { // your global error handling here! } } 

你可以发送你自己的url params到错误页面

 <customErrors mode="On" defaultRedirect="~/default.html?404"> <error statusCode="404" redirect="~/PageNotFound.html?404" /> </customErrors> 

我想你应该在Global.asax中实现/使用Application_Error事件,并在那里处理/redirect。

提供你在该处理程序中调用Server.ClearError ,我不认为它会使用customErrorsconfiguration。

我喜欢使用JavaScript

 if (location.search != "") { window.location.href = "/404.html"; } 

如果你删除了aspxerrorpath = /并且你在error handling过程中使用了响应redirect,你会得到exception,将会有redirect循环。