شروحات و دروس تطوير مواقع

كيفية معالجة الأخطاء في ASP.Net Web API؟

كيفية معالجة الأخطاء في ASP.Net Web API؟

Web API 6 : Handling the exception in Web API

كيفية معالجة الأخطاء في ASP.Net Web API؟

ASP.Net Web API Microsoft هو إطار عمل خفيف الوزن يمكنك استخدامه لبناء خدمات RESTTful التي تحدث على رمز وقت التشغيل HTTP. إنه تطبيقك.

ASP.Net Web API يجب أن يعرف المطور كيفية التعامل مع الأخطاء في Web API ، يجب أن يعرف هذا المطور كيفية إرسال رموز الخطأ أو الرسائل ذات الصلة من أساليب وحدة التحكم. في القسم التالي ، سوف نعلمك كيفية القيام بذلك.

استخدم HttpResponseException في ASP.Net Web A9

يمكنك استخدام فئة HttpResponseException لإرجاع رموز الحالة HTTPs والرسائل ذات الصلة من أساليب وحدة التحكم في WTTP. ويرد مثال على ذلك أدناه:

public Employee GetEmployee(int id)
{
    Employee emp = employeeRepository.Get(id);
    if (emp == null)
    {
        var response = new HttpResponseMessage(HttpStatusCode.NotFound)
        {
            Content = new StringContent("Employee doesn't exist", System.Text.Encoding.UTF8, "text/plain"),
            StatusCode = HttpStatusCode.NotFound
        }
        throw new HttpResponseException(response);
    }
    return emp;
}

 

مقالات ذات صلة

إذا قامت Web API بإرجاع IHttpActionResult ، فقد ترغب في تنفيذ طريقة GetEmployee على النحو التالي:

public IHttpActionResult GetEmployee(int id)
{
    Employee emp = employeeRepository.Get(id);
    if (emp == null)
    {
        var response = new HttpResponseMessage(HttpStatusCode.NotFound)
        {
            Content = new StringContent("Employee doesn't exist", System.Text.Encoding.UTF8, "text/plain"),
            StatusCode = HttpStatusCode.NotFound
        }
        throw new HttpResponseException(response);
    }
    return Ok(emp);
}

لاحظ أنه يتم تعيين رموز الخطأ والرسائل المرتبطة بها إلى كائن response ، ويتم إرجاع مثيل HttpResponseException عند حدوث استثناء في الطريقة.

استخدم HttpError في ASP.Net Web API

يمكنك استخدام الأسلوب CreateErrorResponse في التعليمات البرمجية لإرجاع رموز الخطأ ذات المعنى والرسائل ذات الصلة. كن حذرًا من أن الأسلوب CreateErrorResponse ينشئ كائن HttpError ثم يستخدمه داخل كائن HttpResponseMessage. يوضح الكود التالي كيفية استخدام طريقة CreateErrorResponse:

public IActionResult GetEmployee(int id)
{
    Employee emp = employeeRepository.Get(id);
    if (emp == null)
    {
       string message = "Employee doesn't exist";
        throw new HttpResponseException(
            Request.CreateErrorResponse(HttpStatusCode.NotFound, message));
    }
    return Ok(emp);
}

 

ارجع إلى طريقة ()GetEmployee أعلاه ، تتلقى هذه الطريقة معرف employee كمعامل ويستخدم هذا المعرف للبحث عن سجل وإرجاعه employee . إذا لم يتم العثور على السجل المطابق وفقًا للمعرف المحدد ، فسيحدث مثال على HttpResponseException ، لاحظ كيفية إنشاء رسالة الخطأ المناسبة قبل حدوث الاستثناء.

ASP.NET Web API Videos & Slides (39 Videos & Slides - 6 Hours 55 Minutes) - Pragim Tech

استخدم عوامل تصفية الاستثناءات في ASP.Net Web API

عوامل تصفية الاستثناءات هي عوامل تصفية يمكن استخدامها لمعالجة الأخطاء غير المعالجة التي تم إنشاؤها في أساليب controller. بمعنى آخر ، يمكنك استخدام عوامل تصفية الاستثناءات للقبض على الأخطاء غير المعالجة في Web API استعمال. كن حذرًا من أن استخدام عوامل تصفية الاستثناءات العامة يمكن أن يكون ملائمًا للغاية عند حدوث استثناء لا يمكن التحكم فيه في طريقتك.

لإنشاء مرشح استثناء ، يجب علينا تنفيذ واجهة IExceptionFilter. يمكنك أيضًا تطبيق عوامل تصفية الاستثناءات عن طريق توسيع فئة الملخص ExceptionFilterAttribute ثم تجاوز أسلوب OnException. لاحظ أن فئة ExceptionFilterAttribute نفسها تطبق واجهة IExceptionFilter.

كما يوضح مثال التعليمات البرمجية التالي كيفية تطبيق عامل تصفية استثناء مخصص عن طريق توسيع فئة ExceptionFilterAtttribute:

public class CustomExceptionFilter : ExceptionFilterAttribute
    {
        public override void OnException(HttpActionExecutedContext actionExecutedContext)
        {
            HttpStatusCode status = HttpStatusCode.InternalServerError;
            String message = String.Empty;
            var exceptionType = actionExecutedContext.Exception.GetType();
            if (exceptionType == typeof(UnauthorizedAccessException))
            {
                message = "Access to the Web API is not authorized.";
                status = HttpStatusCode.Unauthorized;
            }
            else if (exceptionType == typeof(DivideByZeroException))
            {
                message = "Internal Server Error.";
                status = HttpStatusCode.InternalServerError;
            }
            else
            {
                message = "Not found.";
                status = HttpStatusCode.NotFound;
            }
            actionExecutedContext.Response = new HttpResponseMessage()
            {
                Content = new StringContent(message, System.Text.Encoding.UTF8, "text/plain"),
                StatusCode = status
            };
            base.OnException(actionExecutedContext);
        }
    }

 

ثم تحتاج إلى إضافة عامل تصفية الاستثناء المخصص إلى مجموعة مرشحات الكائنات HttpConfiguration:

public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            config.Formatters.Remove(config.Formatters.XmlFormatter);
            config.Filters.Add(new CustomExceptionFilter());
        }

 

يمكنك تسجيل عامل تصفية الاستثناء الخاص بك باستخدام إحدى الطرق الثلاث التالية:

  • في المستوى Action
  • في المستوى Controller
  • عالمي

يوضح المثال التالي من التعليمات البرمجية كيفية تطبيق عامل تصفية على مستوى Action:

public class EmployeesController : ApiController
{
    [NotImplementedExceptionFilter]
    public Employee GetEmployee(int id)
    {
        throw new NotImplementedException();
    }
}

 

لتطبيق عامل تصفية الاستثناء على مستوى Controller ، يمكنك القيام بما يلي:

[DatabaseExceptionFilter]
public class EmployeesController : ApiController
{
    //Some code
}

 

أيضا إذا كنت تريد تطبيق مرشح الاستثناء الخاص بك بشكل عام على جميع وحدات التحكم ، فتابع ما يلي:

GlobalConfiguration.Configuration.Filters.Add(new DatabaseExceptionFilterAttribute());

 

أخيرا نتمنى أن يكون درس كيفية معالجة الأخطاء في ASP.Net Web API؟ قد أفادكم

يسعدنا إثراء الموضوع من خلال تعليقاتكم و استفساراتكم المفيدة

مع تحيات موقع علم نفسك

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى

أنت تستخدم إضافة Adblock

برجاء دعمنا عن طريق تعطيل إضافة Adblock