理想的行为是这样的:我们捕获异常,记录并返回一些错误信息而不会崩溃。我们应该怎么做?
根据我的理解,您可以利用Application_Error
事件捕获ASP.NET中未处理的异常。这里是我的测试,你可以参考一下吧:
protected void Application_Error()
{
HttpContext httpContext = HttpContext.Current;
var exception=Server.GetLastError();
var httpException = exception as HttpException ?? new HttpException(500, "Internal Server Error", exception);
var jsonResponse = new
{
Message = exception.Message,
StatusCode = httpException.GetHttpCode(),
StackTrace=httpException.StackTrace
};
httpContext.Response.ContentType = "application/json";
httpContext.Response.ContentEncoding = Encoding.UTF8;
httpContext.Response.Write(JsonConvert.SerializeObject(jsonResponse));
httpContext.Response.End();
}
注:你也可以重定向到一个特定的错误页面。
此外,您可以利用web.config中的customErrors
并捕获特定HTTP错误代码的错误页面。此外,您可以检查Application_EndRequest
事件下的HTTP状态代码并编写自定义响应,详细信息可参考此类似的issue。此外,我建议您按照Demystifying ASP.NET MVC 5 Error Pages and Error Logging获取有关错误处理的更多详细信息。
我喜欢你所做的,因为我们通过将错误发送给自己并向用户显示一个通用错误来做类似的事情。我们怎样才能专门捕捉到这个错误?我们最近发现,我们需要专门为某些其他函数捕获'HttpRequestValidationException',并且希望找到一种专门捕获此错误的方法。 – RoLYroLLs