Programiranje

Kako ravnati z napakami v spletnem API-ju ASP.NET

Microsoftov spletni API ASP.NET je lahek okvir, ki ga lahko uporabite za izdelavo storitev RESTful brez državljanstva, ki se izvajajo na HTTP. Izjeme so napake, ki se pojavijo med izvajanjem, ravnanje z izjemami pa je tehnika obdelave napak med izvajanjem v kodi aplikacije.

Vsak razvijalec spletnega API-ja ASP.NET bi moral vedeti, kako ravnati z izjemami v spletnem API-ju in kako poslati ustrezne kode napak in sporočila o napakah iz metod krmilnika spletnega API-ja. V nadaljevanju bomo preučili, kako izvajati te naloge.

Uporaba HttpResponseException v spletnem API-ju ASP.NET

Razred HttpResponseException lahko uporabite za vrnitev določenih kod stanja HTTP in sporočil iz metod krmilnika v spletnem API-ju. Tu je primer.

javni uslužbenec GetEfficiee (int id)

{

Zaposleni emp = workerRepository.Get (id);

če (emp == null)

    {

odziv var = novo HttpResponseMessage (HttpStatusCode.NotFound)

        {

Content = new StringContent ("Zaposleni ne obstaja", System.Text.Encoding.UTF8, "text / plain"),

StatusCode = HttpStatusCode.NotFound

        }

vrzi novo HttpResponseException (odgovor);

    }

vrnitev emp;

}

Če vaš spletni API vrne IHttpActionResult, boste morda želeli napisati metodo GetEfficiee, kot je prikazano spodaj.

public IHttpActionResult GetEfficiee (int id)

{

Zaposleni emp = workerRepository.Get (id);

če (emp == null)

    {

odziv var = novo HttpResponseMessage (HttpStatusCode.NotFound)

        {

Content = new StringContent ("Zaposleni ne obstaja", System.Text.Encoding.UTF8, "text / plain"),

StatusCode = HttpStatusCode.NotFound

        }

vrzi novo HttpResponseException (odgovor);

    }

vrnitev Ok (emp);

}

Upoštevajte, da sta odzivnemu objektu dodeljena koda napake in sporočilo o napaki in da se primerek HttpResponseException vrne, ko pride do izjeme v akcijski metodi krmilnika spletnega API-ja.

Uporaba HttpError v spletnem API-ju ASP.NET

Za vrnitev smiselnih kod napak in sporočil o napakah lahko uporabite metodo razširitve CreateErrorResponse v metodi krmilnika spletnega API-ja. Upoštevajte, da metoda CreateErrorResponse ustvari objekt HttpError in ga nato zavije v objekt HttpResponseMessage.

Naslednji seznam kod ponazarja, kako lahko uporabite metodo razširitve CreateErrorResponse iz metode dejanja krmilnika spletnega API-ja.

javni IActionResult GetEfficiee (int id)

{

Zaposleni emp = workerRepository.Get (id);

če (emp == null)

    {

string message = "Zaposleni ne obstaja";

vrzi novo HttpResponseException (

Request.CreateErrorResponse (HttpStatusCode.NotFound, sporočilo));

    }

vrnitev Ok (emp);

}

Oglejte si zgoraj prikazano metodo GetEfficiee (). Ta metoda kot parameter sprejme ID zaposlenega in ga uporablja za iskanje in pridobivanje zapisa zaposlenega z uporabo primerka repozitorija zaposlenega. Če zapisa zaposlenega z navedenim ID-jem zaposlenega ni mogoče najti, se vrže primerek HttpResponseException. Upoštevajte, kako sta zgrajena ustrezno sporočilo o napaki in koda napake, preden primerek izjeme vrže metoda krmilnika spletnega API-ja.

Uporaba filtrov izjem v spletnem API-ju ASP.NET

Filtri izjem so filtri, ki jih je mogoče uporabiti za obdelavo neobdelanih izjem, ustvarjenih v metodah krmilnika spletnega API-ja. Z drugimi besedami, s filtri izjem lahko ujamete neobdelane izjeme v spletnem API-ju, ki izvirajo iz metod krmilnika. Upoštevajte, da je globalni filter napak dober pristop k obravnavi izjem v vašem spletnem API-ju, če se neobdelane izjeme vržejo in ne obravnavajo v metodah krmilnika.

Če želite ustvariti filter izjem, morate implementirati vmesnik IExceptionFilter. Filtre izjem lahko ustvarite tudi tako, da razširite abstraktni razred ExceptionFilterAttribute in nato preglasite metodo OnException. Upoštevajte, da abstraktni razred ExceptionFilterAttribute izvaja vmesnik IExceptionFilter.

Naslednji delček kode prikazuje, kako lahko ustvarite filter izjem po meri tako, da razširite razred ExceptionFilterAttribute in nato preglasite metodo OnException. Upoštevajte, kako standardni izjeme, ki jih vržejo metode krmilnika, zajame filter izjem po meri in nato z ustreznimi HttpStatusCode pretvori v objekte HttpStatusResponse.

javni razred CustomExceptionFilter: ExceptionFilterAttribute

    {

javno preglasitev void OnException (HttpActionExecutedContext actionExecutedContext)

        {

HttpStatusCode status = HttpStatusCode.InternalServerError;

Sporočilo niza = String.Empty;

var exceptionType = actionExecutedContext.Exception.GetType ();

if (exceptionType == typeof (UnauthorizedAccessException))

            {

message = "Dostop do spletnega API-ja ni dovoljen.";

status = HttpStatusCode.Nepooblaščeno;

            }

sicer če (typeType == typeof (DivideByZeroException))

            {

message = "Notranja napaka strežnika.";

status = HttpStatusCode.InternalServerError;

            }

drugače

            {

message = "Ni najdeno.";

status = HttpStatusCode.NotFound;

            }

actionExecutedContext.Response = novo HttpResponseMessage ()

            {

Content = new StringContent (message, System.Text.Encoding.UTF8, "text / plain"),

StatusCode = stanje

            };

base.OnException (actionExecutedContext);

        }

    }

Filter izjeme po meri dodajte zbirki filtrov objekta HttpConfiguration.

javni statični void Register (HttpConfiguration config)

        {

config.MapHttpAttributeRoutes ();

config.Routes.MapHttpRoute (

ime: "DefaultApi",

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

privzeto: novo {id = RouteParameter.O optional}

            );

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

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

        }

Filtre izjem lahko registrirate na enega od naslednjih treh načinov:

  • Na ravni akcije
  • Na ravni krmilnika
  • Globalno

Naslednji delček kode prikazuje, kako lahko uporabite filter na ravni dejanja, tj. Za način delovanja krmilnika.

javni razred EmployeesController: ApiController

{

[NotImplementedExceptionFilter]

javni uslužbenec GetEfficiee (int id)

    {

vrzi novo NotImplementedException ();

    }

}

Če želite filter izjeme uporabiti na ravni krmilnika, bi morali uporabiti atribut filtra na ravni razreda, kot je prikazano spodaj.

[DatabaseExceptionFilter]

javni razred EmployeesController: ApiController

{

// Nekaj ​​kode

}

Svoj filter izjem po meri lahko uporabite tudi globalno, tako da deluje za vse krmilnike spletnega API-ja. Tukaj je opisano, kako lahko to storite.

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

Naslednji delček kode prikazuje, kako lahko uporabite filter izjem po meri, ki smo ga prej ustvarili, za vašo metodo krmilnika.

[CustomExceptionFilter]

javni IEnumerable Get ()

 {

vrzi novo DivideByZeroException ();

 }

ASP.NET spletni API podpira uporabo HttpResponseException za obdelavo izjem na ravni krmilnika in na ravni akcije. Ko metoda dejanja v spletnem API-ju vrže neulovljeno izjemo, se izjema prevede v kodo stanja HTTP 500, tj. »Notranja napaka strežnika« Če uporabljate HttpResponseException, lahko v konstruktorju razreda HttpResponseException določite kodo stanja, ki jo želite vrniti. Na ta način lahko prilagodite svoje kode napak, da bodo bolj smiselne.

Kako narediti več v ASP.NET in ASP.NET Core:

  • Kako uporabljati predpomnjenje v pomnilniku v ASP.NET Core
  • Kako ravnati z napakami v spletnem API-ju ASP.NET
  • Kako prenesti več parametrov v metode krmilnika spletnega API-ja
  • Kako zapisati metapodatke zahtev in odzivov v spletni API ASP.NET
  • Kako delati s HttpModules v ASP.NET
  • Napredno spreminjanje različic v ASP.NET Core Web API
  • Kako uporabiti vbrizgavanje odvisnosti v ASP.NET Core
  • Kako delati s sejami v ASP.NET
  • Kako delati z HTTPHandlers v ASP.NET
  • Kako uporabljati IHostedService v ASP.NET Core
  • Kako porabiti storitev WCF SOAP v ASP.NET Core
  • Kako izboljšati delovanje aplikacij ASP.NET Core
  • Kako porabiti spletni API ASP.NET Core s pomočjo RestSharp
  • Kako delati s prijavo v ASP.NET Core
  • Kako uporabljati MediatR v ASP.NET Core
  • Kako delati s stanjem seje v ASP.NET Core
  • Kako uporabljati Nancy v ASP.NET Core
  • Razumevanje vezave parametrov v spletnem API-ju ASP.NET
  • Kako naložiti datoteke v ASP.NET Core MVC
  • Kako implementirati globalno obravnavo izjem v ASP.NET Core Web API
  • Kako izvajati zdravstvene preglede v ASP.NET Core
  • Najboljše prakse predpomnjenja v ASP.NET
  • Kako uporabljati sporočila Apache Kafka v .NET
  • Kako omogočiti CORS v spletnem API-ju
  • Kdaj uporabiti WebClient v primerjavi s HttpClient v primerjavi s HttpWebRequest
  • Kako delati s predpomnilnikom Redis v .NET
  • Kdaj uporabiti Task.WaitAll v primerjavi z Task.WhenAll v .NET
$config[zx-auto] not found$config[zx-overlay] not found