我知道关于这个主题有很多线索,但没有一个提供完整且完整的解决方案。
我有一个提供MVC 5和Web Api 2.2控制器的应用程序。 我需要捕获所有异常(包括404,401)并始终返回自定义JSON错误结构。
到目前为止,我已经实现了一个自定义ExceptionFilterAttribute
,如下所示:
public class ExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
context.Response = context.Request.CreateResponse(
HttpStatusCode.InternalServerError,
new
{
Title = "An Error occured while processing the request",
Message = context.Exception.ToString(),
Type = "Error",
Code = context.Exception.HResult
});
context.Response.ReasonPhrase = "An Error occurred while processing the request";
}
}
然后我也扩展并替换了可用的ExceptionHandler服务,如下所示:
public class GenericExceptionHandler : ExceptionHandler
{
public override void Handle(ExceptionHandlerContext context)
{
context.Result = HttpResponseFactory.BadResponse(
context.Request,
"An unhandled error occurred",
context.Exception.Message,
10000);
}
}
我在初始化期间交换了两个:
public static void Register(HttpConfiguration config)
{
// authentication
config.Filters.Add(new AuthorizeAttribute());
// error handler
config.Filters.Add(new ExceptionFilter());
// error service
config.Services.Replace(typeof(IExceptionHandler), new GenericExceptionHandler());
}
不幸的是,当我生成:
我无法捕获异常。有没有办法实现它?
答案 0 :(得分:0)
将其放入Global
文件中:
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
// Do something with the error.
System.Diagnostics.Debug.WriteLine(exception);
// Redirect somewhere or return an error code in case of web api
Response.Redirect("/Home/Error");
}
任何时候,发生错误,ASP MVC都会调用该方法。