500使用WebForms进行错误处理
问题描述:
我在使用VB.NET进行500错误处理时遇到问题。500使用WebForms进行错误处理
我的问题是,当一个500错误被抛出,我的网站重定向到我的错误页面。但是,如果我在Chrome浏览器中检查网络标签,则会看到我为导出错误的页面获取了200(确定),然后为重定向到的页面添加了200。
我是否认为应该在引发错误的页面上返回500错误,并且为重定向页面返回200?
我的web配置的错误处理设置如下:
<customErrors defaultRedirect="~/error.aspx" mode="On">
<error statusCode="400" redirect="~/400Error.aspx" />
<error statusCode="500" redirect="~/error.aspx?code=500" />
</customErrors>
<httpErrors errorMode="Custom" existingResponse="Replace">
<clear />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/error.aspx" responseMode="ExecuteURL" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" prefixLanguageFilePath="" path="/error.aspx?code=500" responseMode="ExecuteURL" />
<remove statusCode="400" subStatusCode="-1" />
<error statusCode="400" prefixLanguageFilePath="" path="/400Error.aspx" responseMode="ExecuteURL" />
</httpErrors>
但在这个问题单独以上结果我形容。
我想,也许我可以通过使用的Application_Error Global.asax文件返回页面500:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
Response.StatusCode = System.Net.HttpStatusCode.InternalServerError
Server.ClearError()
Server.Transfer("error.aspx?code=500")
End Sub
或者对我的母版页中添加类似的代码页级别:
Protected Sub Page_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Error
Response.StatusCode = System.Net.HttpStatusCode.InternalServerError
Server.ClearError()
Server.Transfer("error.aspx?code=500")
End Sub
通过捕获页面级别的错误,我被重定向到错误页面,其结果与通过处理web.config文件中的错误所产生的结果相同。虽然捕获应用程序级别上的错误似乎返回错误页面而不执行重定向(?),并且在此实例中仅返回一个200。
我已经尝试了上面的代码的组合 - 我明白,Server.ClearError()将停止从'bubbling'到web.config级别的错误?但是,我尝试过没有这条路线,但没有取得太大的成功。
任何人都可以告诉我,如果这是正确的返回页面上引发错误的500,如果是这样,我能做些什么来实现这一目标?
答
我发现,如果我扔在应用层面的例外,那么我实现返回错误页面,而不会重定向,以及返回500错误的结果:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
Dim ex = Server.GetLastError()
//log error details
Response.StatusCode = System.Net.HttpStatusCode.InternalServerError
Server.ClearError()
Throw New Exception
End Sub
我不知道,如果这是解决我的问题的最好方法,但是如果其他人发现这个问题有用的话,我们会留下来。