gpt4 book ai didi

asp.net-mvc - OnExceptionAsync 与 OnException 之间的 ExceptionFilter 区别

转载 作者:行者123 更新时间:2023-12-03 01:29:51 25 4
gpt4 key购买 nike

就是这样。

在MVC或WebApi中编写自定义异常过滤器时,OnExceptionAsyncOnException方法有什么区别?是否仅在使用异步 Controller 时才调用 OnExceptionAsync?或者两者都被调用?

何时使用哪个?

如何使用OnExceptionAsync返回任务结果?

一些要说明的基本代码:

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 与异步操作一起使用。

如果您想要一个简单的场景,例如发送错误的可序列化描述,您可以重写 OnException 而不是 OnExceptionAsync,因为 OnExceptionAsync 会调用 ExceptionFilterAttribute default implementation 中的 OnException :

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

async 和await 关键字将为您完成管理异步行为的工作。您不需要返回 Task 对象。

关于asp.net-mvc - OnExceptionAsync 与 OnException 之间的 ExceptionFilter 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25031038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com