Jur*_*uri 13 asp.net-mvc asp.net-web-api asp.net-web-api2
而已.
在MVC或WebApi中编写custome异常过滤器时,OnExceptionAsync和OnException方法之间有什么区别?是否仅在使用异步控制器时才调用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
}
}
Run Code Online (Sandbox Code Playgroud)
小智 12
我认为OnExceptionAsync与异步Actions一起使用.
如果您想要一个简单的场景,例如发送错误的可序列化描述,则可以覆盖OnException而不是OnExceptionAsync,因为OnExceptionAsync在ExceptionFilterAttribute默认实现中调用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
};
}
Run Code Online (Sandbox Code Playgroud)
但您可能希望在数据库中记录异常并利用异步行为:
public override async Task OnExceptionAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)
{
await LogException(actionExecutedContext.Exception);
}
Run Code Online (Sandbox Code Playgroud)
async和await关键字将帮助您管理异步行为.您不需要返回Task对象.
| 归档时间: |
|
| 查看次数: |
5100 次 |
| 最近记录: |