就是这样。

在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);
}
.

异步和等待关键字将为您管理异步行为。您无需返回任务对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top