我遇到了500个错误处理问题,在VB.NET中工作。
我的问题是,当引发500错误时,我的网站会重定向到我的错误页面。但是,如果我检查Chrome中的“网络”标签,我会看到我为获取错误的页面获得200(OK),然后为重定向到的页面获得另外200个。
我是否认为应该在抛出错误的页面上返回500错误,并且为重定向页面返回200错误?
我的网络配置错误处理设置如下:
<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>
但仅此一点导致我上面描述的问题。
我想也许我可以使用Global.asax文件中的Application_Error在页面上返回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()会将错误从'冒泡'停止到web.config级别吗?但是,我尝试过没有这条线,没有取得太大成功。
有人能告诉我,如果返回引发错误的页面上的500是否正确,如果是这样,我能做些什么来实现这个目标?
答案 0 :(得分:0)
我发现如果我在应用程序级别抛出异常,那么我实现了返回错误页面而不重定向的结果,以及返回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
我不确定这是否是解决问题的最佳方法,但如果其他人认为这有用,我会不予理睬。