ExceptionFilter الفرق بين OnExceptionAsync مقابل OnException
-
21-12-2019 - |
سؤال
هذا هو.
عند كتابة custome استثناء تصفية في MVC أو WebApi, ما هو الفرق بين 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 يستخدم مع المتزامن الإجراءات.
إذا كنت تريد سيناريو بسيط مثل إرسال تسلسل وصف الخطأ, يمكنك تجاوز OnException وليس OnExceptionAsync منذ OnExceptionAsync تحتج OnException في 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);
}
المتزامن وننتظر كلمات سوف قيام بهذه المهمة بالنسبة لك لإدارة المتزامن السلوك.أنت لا تحتاج إلى عودة وجوه العمل.