如何防止“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循环。