Programavimas

Kaip tvarkyti klaidas ASP.NET žiniatinklio API

„Microsoft“ ASP.NET žiniatinklio API yra lengva sistema, kurią galite naudoti kurdami be pilietybės RESTful paslaugas, kurios veikia HTTP. Išimtys yra klaidos, atsirandančios vykdymo metu, o išimčių tvarkymas yra vykdymo laiko klaidų tvarkymo jūsų programos kode technika.

Kiekvienas ASP.NET žiniatinklio API kūrėjas turėtų žinoti, kaip tvarkyti išimtis žiniatinklio API ir kaip siųsti tinkamus klaidų kodus ir klaidų pranešimus iš žiniatinklio API valdiklio metodų. Toliau pateiktuose skyriuose išnagrinėsime, kaip atlikti šias užduotis.

„HttpResponseException“ naudojimas ASP.NET žiniatinklio API

Galite naudoti „HttpResponseException“ klasę, jei norite grąžinti konkrečius HTTP būsenos kodus ir pranešimus iš valdiklio metodų žiniatinklio API. Štai pavyzdys.

viešasis darbuotojas „GetEmployee“ (int id)

{

Darbuotojo emp = darbuotojo saugykla.Get (id);

jei (emp == nulis)

    {

var response = new HttpResponseMessage (HttpStatusCode.NotFound)

        {

„Content = new StringContent“ („Darbuotojo nėra“, „System.Text.Encoding.UTF8“, „text / plain“),

StatusCode = HttpStatusCode.NotFound

        }

mesti naują HttpResponseException (atsakas);

    }

grįžti emp;

}

Jei jūsų žiniatinklio API pateikia „IHttpActionResult“, galbūt norėsite parašyti „GetEmployee“ metodą, kaip parodyta žemiau.

public IHttpActionResult GetEmployee (int id)

{

Darbuotojo emp = darbuotojo saugykla.Get (id);

jei (emp == nulis)

    {

var response = new HttpResponseMessage (HttpStatusCode.NotFound)

        {

„Content = new StringContent“ („Darbuotojo nėra“, „System.Text.Encoding.UTF8“, „text / plain“),

StatusCode = HttpStatusCode.NotFound

        }

mesti naują HttpResponseException (atsakas);

    }

grįžti Ok (emp);

}

Atkreipkite dėmesį, kad klaidos kodas ir klaidos pranešimas priskiriami atsako objektui ir kad „HttpResponseException“ egzempliorius grąžinamas, kai žiniatinklio API valdiklio veiksmo metodo įvyksta išimtis.

„HttpError“ naudojimas ASP.NET žiniatinklio API

Norėdami grąžinti reikšmingus klaidos kodus ir klaidų pranešimus, galite naudoti „WebE API“ valdiklio metodą „CreateErrorResponse“ plėtinio metodą. Atkreipkite dėmesį, kad metodas „CreateErrorResponse“ sukuria „HttpError“ objektą ir tada jį suvynioja į „HttpResponseMessage“ objektą.

Šis kodų sąrašas parodo, kaip galite naudoti plėtinio „CreateErrorResponse“ metodą iš savo žiniatinklio API valdiklio veiksmų metodo.

public IActionResult GetEmployee (int id)

{

Darbuotojo emp = darbuotojo saugykla.Get (id);

jei (emp == nulis)

    {

string message = "Darbuotojo nėra";

mesti naują „HttpResponseException“ (

Request.CreateErrorResponse (HttpStatusCode.NotFound, pranešimas));

    }

grįžti Ok (emp);

}

Žr. Aukščiau pateiktą „GetEmployee“ () metodą. Šis metodas priima darbuotojo ID kaip parametrą ir naudoja šį ID ieškant ir gaunant darbuotojo įrašą naudojant darbuotojų saugyklos egzempliorių. Jei darbuotojo įrašas su nurodytu darbuotojo ID nerandamas, „HttpResponseException“ egzempliorius išmetamas. Atkreipkite dėmesį, kaip sukuriamas tinkamas klaidos pranešimas ir klaidos kodas prieš išimties egzempliorių metant iš žiniatinklio API valdiklio metodo.

Išimties filtrų naudojimas ASP.NET žiniatinklio API

Išimčių filtrai yra filtrai, kuriuos galima naudoti tvarkant neapdorotas išimtis, sugeneruotas jūsų žiniatinklio API valdiklio metodais. Kitaip tariant, galite naudoti išimčių filtrus, kad užfiksuotumėte neapsaugotas žiniatinklio API išimtis, kilusias iš jūsų valdiklio metodų. Atminkite, kad visuotinis klaidų filtras yra tinkamas būdas tvarkyti išimtis jūsų žiniatinklio API, jei neapdorotos išimtys metamos ir netvarkomos valdiklio metodais.

Norėdami sukurti išimčių filtrą, turite įdiegti „IExceptionFilter“ sąsają. Taip pat galite sukurti išimčių filtrus, išplėsdami abstrakčią klasę „ExceptionFilterAttribute“ ir tada nepaisydami „OnException“ metodo. Atkreipkite dėmesį, kad abstrakta klasė „ExceptionFilterAttribute“ savo ruožtu įgyvendina „IExceptionFilter“ sąsają.

Šis kodo fragmentas iliustruoja, kaip galite sukurti pasirinktinį išimčių filtrą, išplėsdami klasę ExceptionFilterAttribute ir tada nepaisydami OnException metodo. Atkreipkite dėmesį, kaip standartinės išimtys, kurias meta jūsų valdiklio metodai, užfiksuoja pasirinktinių išimčių filtrą ir tada konvertuojamos į „HttpStatusResponse“ objektus su atitinkamu „HttpStatusCode“.

public class CustomExceptionFilter: ExceptionFilterAttribute

    {

public override void OnException (HttpActionExecutedContext actionExecutedContext)

        {

HttpStatusCode status = HttpStatusCode.InternalServerError;

Eilutės pranešimas = String.Empty;

var kivételType = actionExecutedContext.Exception.GetType ();

jei (kivételType == typeof (UnauthorizedAccessException))

            {

message = "Prieiga prie žiniatinklio API neleidžiama.";

status = HttpStatusCode. Neleidžiama;

            }

else if (išskirtinisTipas == typeof („DivideByZeroException“))

            {

message = "Vidinė serverio klaida.";

status = HttpStatusCode.InternalServerError;

            }

Kitas

            {

message = "Nerasta.";

status = HttpStatusCode.NotFound;

            }

actionExecutedContext.Response = new HttpResponseMessage ()

            {

„Content = new StringContent“ (pranešimas, System.Text.Encoding.UTF8, „text / plain“),

StatusCode = būsena

            };

bazė.OnException (actionExecutedContext);

        }

    }

Turėtumėte pridėti pasirinktinių išimčių filtrą prie „HttpConfiguration“ objekto filtrų rinkinio.

public static void Register („HttpConfiguration config“)

        {

config.MapHttpAttributeRoutes ();

config.Routes.MapHttpRoute (

pavadinimas: „DefaultApi“,

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

numatytieji parametrai: new {id = RouteParameter.Optional}

            );

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

config.Filters.Add (naujas CustomExceptionFilter ());

        }

Išimčių filtrus galite užregistruoti vienu iš šių trijų būdų:

  • Veiksmo lygiu
  • Valdiklio lygiu
  • Visame pasaulyje

Šis kodo fragmentas parodo, kaip galite taikyti filtrą veiksmo lygiu, t. Y. Valdiklio veiksmų metodui.

viešosios klasės „EmployeesController“: „ApiController“

{

[NotImplementedExceptionFilter]

viešasis darbuotojas „GetEmployee“ (int id)

    {

mesti naują NotImplementedException ();

    }

}

Norėdami taikyti išimčių filtrą valdiklio lygiu, turėsite naudoti filtro atributą klasės lygiu, kaip parodyta žemiau.

[DatabaseExceptionFilter]

viešosios klasės „EmployeesController“: „ApiController“

{

// Kažkas kodas

}

Taip pat galite pritaikyti pasirinktinį išimčių filtrą visame pasaulyje, kad jis veiktų visuose žiniatinklio API valdikliuose. Štai kaip jūs galite tai padaryti.

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

Šis kodo fragmentas parodo, kaip galite pritaikyti anksčiau sukurtą pasirinktinių išimčių filtrą savo valdiklio metodui.

[CustomExceptionFilter]

public IEnumerable Get ()

 {

mesti naują DivideByZeroException ();

 }

ASP.NET žiniatinklio API palaiko „HttpResponseException“ naudojimą tvarkant išimtis tiek valdiklio, tiek veiksmo lygiu. Kai žiniatinklio API veiksmo metodas išmeta neužfiksuotą išimtį, išimtis išverčiama į HTTP būsenos kodą 500, ty „Vidinė serverio klaida“. Jei naudojate „HttpResponseException“, būsenos kodą, kurį norite grąžinti, galite nurodyti „HttpResponseException“ klasės konstruktoriuje. Tokiu būdu galite pritaikyti klaidų kodus, kad jie būtų prasmingesni.

Kaip padaryti daugiau naudojant ASP.NET ir ASP.NET Core:

  • Kaip naudoti atminties talpyklą ASP.NET Core
  • Kaip tvarkyti klaidas ASP.NET žiniatinklio API
  • Kaip perduoti kelis parametrus žiniatinklio API valdiklio metodams
  • Kaip registruoti užklausos ir atsakymo metaduomenis ASP.NET žiniatinklio API
  • Kaip dirbti su „HttpModules“ ASP.NET
  • Išplėstinė ASP.NET „Core Web API“ versijų versija
  • Kaip naudoti priklausomybės injekciją ASP.NET Core
  • Kaip dirbti su sesijomis ASP.NET
  • Kaip dirbti su HTTPHandleriais sistemoje ASP.NET
  • Kaip naudoti „IHostedService“ ASP.NET Core
  • Kaip vartoti WCF SOAP paslaugą ASP.NET Core
  • Kaip pagerinti ASP.NET Core programų veikimą
  • Kaip suvartoti ASP.NET Core Web API naudojant „RestSharp“
  • Kaip dirbti su registravimu ASP.NET Core
  • Kaip naudoti „MediatR“ ASP.NET Core
  • Kaip dirbti su seanso būsena ASP.NET Core
  • Kaip naudoti „Nancy“ ASP.NET Core
  • Supraskite parametrų susiejimą ASP.NET žiniatinklio API
  • Kaip įkelti failus į ASP.NET Core MVC
  • Kaip įdiegti visuotinį išimčių tvarkymą ASP.NET Core Web API
  • Kaip atlikti sveikatos patikrinimus ASP.NET Core
  • Geriausia ASP.NET talpyklos talpinimo praktika
  • Kaip naudoti „Apache Kafka“ pranešimus .NET
  • Kaip įgalinti CORS savo žiniatinklio API
  • Kada naudoti „WebClient“, palyginti su „HttpClient“ ir „HttpWebRequest“
  • Kaip dirbti su „Redis Cache“ .NET
  • Kada .NET naudoti „Task.WaitAll“ ir „Task.WhenAll“