OnexceptionAsync vs.onexception之间的异常差异
-
21-12-2019 - |
题
就是这样。
在mvc或webapi中编写 custome异常筛选器时, onexceptionasync 和 onexception 方法之间有什么区别? 是否只有在使用异步控制器时才调用OnexceptionAsync? 或两者都被称为?
何时使用?
如何使用onexceptionasync返回任务结果?ilustrate的一些基本代码:
public class ApiExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
//TODO exception handling
}
public override Task OnExceptionAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)
{
//TODO exception handling
}
}
. 解决方案
我认为OnexceptionAsync与Async操作一起使用。
如果您想要一个简单的方案,如发送序列化的错误描述,您可以覆盖onexception and not onexceptionasync,因为onexceptionasync调用 ExceptionFilterattribute默认实现:
public override void OnException(System.Web.Http.Filters.HttpActionExecutedContext actionExecutedContext)
{
actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(HttpStatusCode.InternalServerError, new
{
Message = "An unexpected error has occured",
Description = actionExecutedContext.Exception.Message
});
actionExecutedContext.Response.Headers.CacheControl = new System.Net.Http.Headers.CacheControlHeaderValue()
{
NoCache = true,
NoStore = true
};
}
.
但您可能希望在数据库中记录异常,并利用异步行为:
public override async Task OnExceptionAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)
{
await LogException(actionExecutedContext.Exception);
}
.
异步和等待关键字将为您管理异步行为。您无需返回任务对象。
不隶属于 StackOverflow