سؤال

هذا هو.

عند كتابة 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);
}

المتزامن وننتظر كلمات سوف قيام بهذه المهمة بالنسبة لك لإدارة المتزامن السلوك.أنت لا تحتاج إلى عودة وجوه العمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top