كيفية معالجة الأخطاء في ASP.Net 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. ويرد مثال على ذلك أدناه:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 على النحو التالي:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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:
1 2 3 4 5 6 7 8 9 10 11 | 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
عوامل تصفية الاستثناءات هي عوامل تصفية يمكن استخدامها لمعالجة الأخطاء غير المعالجة التي تم إنشاؤها في أساليب controller. بمعنى آخر ، يمكنك استخدام عوامل تصفية الاستثناءات للقبض على الأخطاء غير المعالجة في Web API استعمال. كن حذرًا من أن استخدام عوامل تصفية الاستثناءات العامة يمكن أن يكون ملائمًا للغاية عند حدوث استثناء لا يمكن التحكم فيه في طريقتك.
لإنشاء مرشح استثناء ، يجب علينا تنفيذ واجهة IExceptionFilter. يمكنك أيضًا تطبيق عوامل تصفية الاستثناءات عن طريق توسيع فئة الملخص ExceptionFilterAttribute ثم تجاوز أسلوب OnException. لاحظ أن فئة ExceptionFilterAttribute نفسها تطبق واجهة IExceptionFilter.
كما يوضح مثال التعليمات البرمجية التالي كيفية تطبيق عامل تصفية استثناء مخصص عن طريق توسيع فئة ExceptionFilterAtttribute:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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:
1 2 3 4 5 6 7 8 9 10 11 | 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:
1 2 3 4 5 6 7 8 | public class EmployeesController : ApiController { [NotImplementedExceptionFilter] public Employee GetEmployee(int id) { throw new NotImplementedException(); } } |
لتطبيق عامل تصفية الاستثناء على مستوى Controller ، يمكنك القيام بما يلي:
1 2 3 4 5 | [DatabaseExceptionFilter] public class EmployeesController : ApiController { //Some code } |
أيضا إذا كنت تريد تطبيق مرشح الاستثناء الخاص بك بشكل عام على جميع وحدات التحكم ، فتابع ما يلي:
1 | GlobalConfiguration.Configuration.Filters.Add(new DatabaseExceptionFilterAttribute()); |
أخيرا نتمنى أن يكون درس كيفية معالجة الأخطاء في ASP.Net Web API؟ قد أفادكم
يسعدنا إثراء الموضوع من خلال تعليقاتكم و استفساراتكم المفيدة
مع تحيات موقع hdegy