כיצד לטפל בשגיאות ב- ASP.NET Web API

ה- API של ASP.NET Web של מיקרוסופט הוא מסגרת קלה המשמשת לך לבניית שירותי RESTful חסרי מדינה הפועלים ב- HTTP. חריגים הם שגיאות המתרחשות בזמן ריצה, וטיפול בחריגים הוא הטכניקה לטיפול בשגיאות זמן ריצה בקוד היישום שלך.

כל מפתח ASP.NET Web API צריך לדעת לטפל בחריגים ב- API API וכיצד לשלוח קודי שגיאה מתאימים והודעות שגיאה משיטות בקר API API. נבחן כיצד לבצע משימות אלה בסעיפים להלן. 

שימוש ב- HttpResponseException ב- ASP.NET Web API

באפשרותך להשתמש במחלקה HttpResponseException להחזרת קודי מצב HTTP ספציפיים והודעות משיטות הבקר שלך ב- Web API. הנה דוגמה.

עובד ציבורי GetEm Employee (int id)

{

    עובד העובד = workerRepository.Get (id);

    אם (emp == null)

    {

        תגובה var = HttpResponseMessage חדש (HttpStatusCode.NotFound)

        {

            Content = new StringContent ("עובד לא קיים", System.Text.Encoding.UTF8, "text / plain"),

            StatusCode = HttpStatusCode.NotFound

        }

        לזרוק HttpResponseException חדש (תגובה);

    }

    חזרת אמפ;

}

אם ה- API של האינטרנט שלך מחזיר את IHttpActionResult, כדאי לך לכתוב את שיטת GetEmployee כפי שמוצג להלן.

IHttpActionResult ציבורי GetEmployee (מזהה int)

{

    עובד העובד = workerRepository.Get (id);

    אם (emp == null)

    {

        תגובה var = HttpResponseMessage חדש (HttpStatusCode.NotFound)

        {

            Content = new StringContent ("עובד לא קיים", System.Text.Encoding.UTF8, "text / plain"),

            StatusCode = HttpStatusCode.NotFound

        }

        לזרוק HttpResponseException חדש (תגובה);

    }

    חזור בסדר (אמפ);

}

שים לב שקוד השגיאה והודעת השגיאה מוקצים לאובייקט התגובה, ושמופע של HttpResponseException מוחזר כאשר מתרחש חריג בשיטת הפעולה של בקר ה- Web API.

שימוש ב- HttpError ב- ASP.NET Web API

באפשרותך להשתמש בשיטת ההרחבה CreateErrorResponse בשיטת בקר ה- Web API שלך להחזרת קודי שגיאה והודעות שגיאה משמעותיות. שים לב ששיטת CreateErrorResponse יוצרת אובייקט HttpError ואז עוטפת אותו בתוך אובייקט HttpResponseMessage.

רישום הקוד הבא ממחיש כיצד ניתן להשתמש בשיטת ההרחבה CreateErrorResponse משיטת הפעולה של בקר ה- API של ה- Web.

IActionResult ציבורי GetEmployee (מזהה int)

{

    עובד העובד = workerRepository.Get (id);

    אם (emp == null)

    {

       string string = "עובד לא קיים";

        לזרוק HttpResponseException חדש (

            Request.CreateErrorResponse (HttpStatusCode.NotFound, הודעה));

    }

    חזור בסדר (אמפ);

}

עיין בשיטת GetEmployee () המוצגת לעיל. שיטה זו מקבלת פרמטר מזהה עובד ומשתמשת במזהה זה כדי לחפש ולאחזר רשומת עובד באמצעות מופע המאגר של העובד. אם לא נמצא רישום עובד עם מזהה העובד שצוין, מופעל מופע של HttpResponseException. שים לב כיצד בניית הודעת השגיאה המתאימה וקוד השגיאה לפני שמופע החריג מושלך משיטת בקר ה- API של ה- Web.

שימוש במסנני חריגים ב- ASP.NET Web API

מסנני חריגים הם מסננים שניתן להשתמש בהם כדי לטפל בחריגים לא מטופלים שנוצרים בשיטות הבקר שלך ב- API API. במילים אחרות, אתה יכול להשתמש במסנני חריגים בכדי לתפוס חריגים שלא טופלו ב- API API שמקורם בשיטות הבקר שלך. שים לב שמסנן שגיאות גלובלי הוא גישה טובה לטיפול בחריגים ב- API של האינטרנט שלך אם חריגים שלא מטופלים נזרקים ולא מטופלים בשיטות הבקר שלך.

כדי ליצור מסנן חריגים, עליך ליישם את ממשק IExceptionFilter. ניתן גם ליצור מסנני חריגים על ידי הרחבת המחלקה המופשטת ExceptionFilterAttribute ואז עקיפת שיטת OnException. שים לב שהמחלקה המופשטת ExceptionFilterAttribute מיישמת בתורתה את ממשק IExceptionFilter.

קטע הקוד הבא ממחיש כיצד ניתן ליצור מסנן חריגים מותאם אישית על ידי הרחבת מחלקת ExceptionFilterAttribute ואז עקיפת שיטת OnException. שים לב כיצד החריגים הסטנדרטיים המושלכים על ידי שיטות הבקר שלך נלכדים על ידי מסנן החריגים המותאם אישית ואז מומרים לאובייקטים HttpStatusResponse עם HttpStatusCode המתאים.

מחלקה ציבורית CustomExceptionFilter: ExceptionFilterAttribute

    {

        ביטול ציבורי בטל OnException (HttpActionExecutedContext actionExecutedContext)

        {

            HttpStatusCode status = HttpStatusCode.InternalServerError;

            הודעת מחרוזת = String.Empty;

            var exceptionType = actionExecutedContext.Exception.GetType ();

            אם (exceptionType == typeof (UnauthorizedAccessException))

            {

                message = "הגישה לממשק ה- API אינה מורשית.";

                status = HttpStatusCode. לא מורשה;

            }

            אחרת אם (exceptionType == typeof (DivideByZeroException))

            {

                message = "שגיאת שרת פנימית.";

                status = HttpStatusCode.InternalServerError;

            }

            אַחֵר

            {

                message = "לא נמצא.";

                status = HttpStatusCode.NotFound;

            }

            actionExecutedContext.Response = HttpResponseMessage חדש ()

            {

                תוכן = StringContent חדש (הודעה, System.Text.Encoding.UTF8, "טקסט / רגיל"),

                StatusCode = סטטוס

            };

            base.OnException (actionExecutedContext);

        }

    }

עליך להוסיף את מסנן החריגים המותאם אישית לאוסף המסננים של האובייקט HttpConfiguration.

רישום ריק סטטי ציבורי (תצורת HttpConfiguration)

        {

            config.MapHttpAttributeRoutes ();

            config.Routes.MapHttpRoute (

                שם: "DefaultApi",

                routeTemplate: "api / {controller} / {id}",

                ברירות מחדל: חדש {id = RouteParameter.Optional}

            );

            config.Formatters.Remove (config.Formatters.XmlFormatter);

            config.Filters.Add (חדש CustomExceptionFilter ());

        }

אתה יכול לרשום את מסנני החריגים שלך באחת משלושת הדרכים הבאות:

  • ברמת הפעולה
  • ברמת הבקר
  • ברחבי העולם

קטע הקוד הבא מראה כיצד ניתן להחיל מסנן ברמת הפעולה, כלומר על שיטת פעולת הבקר שלך.

מחלקה ציבורית עובדים בקרה: ApiController

{

    [NotImplementedExceptionFilter]

    עובד ציבורי GetEm Employee (int id)

    {

        לזרוק NotImplementedException חדש ();

    }

}

כדי להחיל את מסנן החריגים ברמת הבקר, יהיה עליכם להשתמש במאפיין המסנן ברמת הכיתה כמוצג להלן.

[DatabaseExceptionFilter]

מחלקה ציבורית עובדים בקרה: ApiController

{

    // קצת קוד

}

אתה יכול גם להחיל את מסנן החריגים המותאם אישית שלך באופן גלובלי כך שהוא יעבוד על כל בקרי ה- Web API. כך תוכל לעשות זאת.

GlobalConfiguration.Configuration.Filters.Add (DatabaseExceptionFilterAttribute חדש ());

קטע הקוד הבא ממחיש כיצד ניתן להחיל את מסנן החריגים המותאם אישית שיצרנו קודם לכן על שיטת הבקר שלך.

[CustomExceptionFilter]

 מספר IE מספר Get ()

 {

    לזרוק DivideByZeroException חדש (); 

 }

ASP.NET Web API תומך בשימוש ב- HttpResponseException לטיפול בחריגים הן ברמת הבקר והן ברמת הפעולה. כאשר שיטת פעולה ב- Web API מציגה חריג שלא נתפס, החריג מתורגם ל- HTTP Status Code 500, כלומר "שגיאת שרת פנימית". אם אתה משתמש ב- HttpResponseException, תוכל לציין את קוד הסטטוס שברצונך להחזיר בבנאי המחלקה HttpResponseException. בדרך זו תוכל להתאים אישית את קודי השגיאה שלך כדי שיהיו משמעותיים יותר.

כיצד לעשות יותר ב- ASP.NET וב- ASP.NET Core:

  • כיצד להשתמש במטמון בזיכרון ב- ASP.NET Core
  • כיצד לטפל בשגיאות ב- ASP.NET Web API
  • כיצד להעביר מספר פרמטרים לשיטות בקר API API
  • כיצד לרשום מטא נתונים של בקשה ותגובה ב- ASP.NET Web API
  • כיצד לעבוד עם HttpModules ב- ASP.NET
  • גרסאות מתקדמות ב- ASP.NET Core API
  • כיצד להשתמש בהזרקת תלות בליבת ASP.NET
  • כיצד לעבוד עם הפעלות ב- ASP.NET
  • כיצד לעבוד עם HTTPHandlers ב- ASP.NET
  • כיצד להשתמש ב- IHostedService ב- ASP.NET Core
  • כיצד לצרוך שירות WCF SOAP בליבה של ASP.NET
  • כיצד לשפר את הביצועים של יישומי ליבת ASP.NET
  • כיצד לצרוך ASP.NET Core API API באמצעות RestSharp
  • כיצד לעבוד עם כניסה לליבה ASP.NET
  • כיצד להשתמש ב- MediatR בליבת ASP.NET
  • כיצד לעבוד עם מצב הפעלה ב- ASP.NET Core
  • כיצד להשתמש בננסי ב- ASP.NET Core
  • הבן את קשירת הפרמטרים ב- ASP.NET Web API
  • כיצד להעלות קבצים ב- ASP.NET Core MVC
  • כיצד ליישם טיפול חריגים גלובלי ב- ASP.NET Core API
  • כיצד ליישם בדיקות בריאות ב- ASP.NET Core
  • שיטות עבודה מומלצות במטמון ב- ASP.NET
  • כיצד להשתמש בהודעות של Apache Kafka ב- .NET
  • כיצד להפעיל את CORS ב- API האינטרנט שלך
  • מתי להשתמש ב- WebClient לעומת HttpClient לעומת HttpWebRequest
  • כיצד לעבוד עם מטמון Redis ב- .NET
  • מתי להשתמש ב- Task.WaitAll לעומת Task.WhenAll ב- .NET