Programmēšana

Kā rīkoties ar kļūdām ASP.NET Web API

Microsoft ASP.NET Web API ir viegls ietvars, kuru varat izmantot, lai izveidotu bezvalstniekus RESTful pakalpojumus, kas darbojas ar HTTP. Izņēmumi ir kļūdas, kas rodas izpildlaikā, un izņēmumu apstrāde ir izpildlaika kļūdu apstrādes paņēmiens jūsu lietojumprogrammas kodā.

Katram ASP.NET Web API izstrādātājam būtu jāzina, kā rīkoties ar Web API izņēmumiem un kā no Web API kontrollera metodēm izsūtīt atbilstošus kļūdu kodus un kļūdu ziņojumus. Tālāk esošajās sadaļās mēs pārbaudīsim, kā veikt šos uzdevumus.

HttpResponseException izmantošana ASP.NET Web API

Jūs varat izmantot HttpResponseException klasi, lai Web API atgrieztu konkrētus HTTP statusa kodus un ziņojumus no kontroliera metodēm. Šeit ir piemērs.

valsts darbinieks GetEmployee (int id)

{

Darbinieka emp = darbinieksRepository.Get (id);

ja (emp == null)

    {

var response = new HttpResponseMessage (HttpStatusCode.NotFound)

        {

Content = new StringContent ("Darbinieks nepastāv", System.Text.Encoding.UTF8, "text / plain"),

StatusCode = HttpStatusCode.NotFound

        }

mest jaunu HttpResponseException (atbilde);

    }

atgriešanās emp;

}

Ja jūsu tīmekļa API atgriež IHttpActionResult, iespējams, vēlēsities uzrakstīt GetEmployee metodi, kā parādīts zemāk.

public IHttpActionResult GetEmployee (int id)

{

Darbinieka emp = darbinieksRepository.Get (id);

ja (emp == null)

    {

var response = new HttpResponseMessage (HttpStatusCode.NotFound)

        {

Content = new StringContent ("Darbinieks nepastāv", System.Text.Encoding.UTF8, "text / plain"),

StatusCode = HttpStatusCode.NotFound

        }

mest jaunu HttpResponseException (atbilde);

    }

atgriezties Ok (emp);

}

Ņemiet vērā, ka kļūdas kods un kļūdas ziņojums tiek piešķirts atbildes objektam un ka HttpResponseException gadījums tiek atgriezts, kad Web API kontrollera darbības metodē rodas izņēmums.

HttpError izmantošana ASP.NET Web API

Lai atgrieztu nozīmīgus kļūdu kodus un kļūdu ziņojumus, Web API kontroliera metodē varat izmantot paplašinājuma CreateErrorResponse metodi. Ņemiet vērā, ka metode CreateErrorResponse izveido objektu HttpError un pēc tam ietina to objektā HttpResponseMessage.

Šis kodu saraksts parāda, kā no Web API kontrollera darbības metodes var izmantot paplašinājuma CreateErrorResponse metodi.

public IActionResult GetEmployee (int id)

{

Darbinieka emp = darbinieksRepository.Get (id);

ja (emp == null)

    {

string message = "Darbinieks neeksistē";

mest jaunu HttpResponseException (

Request.CreateErrorResponse (HttpStatusCode.NotFound, ziņojums));

    }

atgriezties Ok (emp);

}

Skatiet iepriekš norādīto metodi GetEmployee (). Šī metode pieņem darbinieka ID kā parametru un izmanto šo ID, lai meklētu un izgūtu darbinieka ierakstu, izmantojot darbinieku repozitorija instanci. Ja darbinieka ieraksts ar norādīto darbinieka ID netiek atrasts, tiek izmests HttpResponseException gadījums. Ņemiet vērā, kā tiek izveidots atbilstošais kļūdas ziņojums un kļūdas kods, pirms izņēmuma gadījums tiek izmests no Web API kontrollera metodes.

Izņēmuma filtru izmantošana ASP.NET Web API

Izņēmuma filtri ir filtri, kurus var izmantot, lai apstrādātu neapstrādātus izņēmumus, kas tiek ģenerēti jūsu Web API kontrollera metodēs. Citiem vārdiem sakot, varat izmantot izņēmumu filtrus, lai noķertu neapstrādātos izņēmumus Web API, kas radušies no jūsu kontroliera metodēm. Ņemiet vērā, ka globālais kļūdu filtrs ir laba pieeja izņēmumu apstrādei jūsu tīmekļa API, ja neapstrādāti izņēmumi tiek izmesti un netiek apstrādāti jūsu kontroliera metodēs.

Lai izveidotu izņēmumu filtru, jāievieš IExceptionFilter saskarne. Varat arī izveidot izņēmumu filtrus, paplašinot abstrakto klasi ExceptionFilterAttribute un pēc tam ignorējot OnException metodi. Ņemiet vērā, ka abstraktā klase ExceptionFilterAttribute savukārt īsteno IExceptionFilter saskarni.

Šis koda fragments parāda, kā jūs varat izveidot pielāgotu izņēmumu filtru, paplašinot klasi ExceptionFilterAttribute un pēc tam ignorējot OnException metodi. Ņemiet vērā, kā jūsu kontroliera metožu izmesti standarta izņēmumi tiek notverti pielāgoto izņēmumu filtrā un pēc tam tiek pārveidoti par HttpStatusResponse objektiem ar atbilstošo HttpStatusCode.

publiskā klase CustomExceptionFilter: ExceptionFilterAttribute

    {

public override void OnException (HttpActionExecutedContext actionExecutedContext)

        {

HttpStatusCode status = HttpStatusCode.InternalServerError;

Stīgas ziņojums = String.Etpt;

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

ja (izņēmuma tips == typeof (UnauthorizedAccessException))

            {

message = "Piekļuve tīmekļa API nav atļauta.";

status = HttpStatusCode. Neatļauts;

            }

else if (izņēmuma tips == typeof (DivideByZeroException))

            {

message = "Iekšējā servera kļūda.";

status = HttpStatusCode.InternalServerError;

            }

cits

            {

message = "Nav atrasts.";

status = HttpStatusCode.NotFound;

            }

actionExecutedContext.Response = new HttpResponseMessage ()

            {

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

StatusCode = statuss

            };

bāze.OnException (actionExecutedContext);

        }

    }

Pielāgoto izņēmumu filtrs jāpievieno objekta HttpConfiguration filtru kolekcijai.

public static void Register (HttpConfiguration config)

        {

config.MapHttpAttributeRoutes ();

config.Routes.MapHttpRoute (

nosaukums: "DefaultApi",

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

noklusējumi: new {id = RouteParameter.Optional}

            );

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

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

        }

Izņēmumu filtrus varat reģistrēt vienā no šiem trim veidiem:

  • Rīcības līmenī
  • Kontroliera līmenī
  • Globāli

Šis koda fragments parāda, kā filtru var lietot darbības līmenī, t.i., kontroliera darbības metodei.

publiskā klase EmployeesController: ApiController

{

[NotImplementedExceptionFilter]

valsts darbinieks GetEmployee (int id)

    {

mest jaunu NotImplementedException ();

    }

}

Lai piemērotu izņēmumu filtru kontroliera līmenī, jums būs jāizmanto filtra atribūts klases līmenī, kā parādīts zemāk.

[DatabaseExceptionFilter]

publiskā klase EmployeesController: ApiController

{

// Daži kodi

}

Varat arī pielāgoto izņēmumu filtru piemērot visā pasaulē, lai tas darbotos visos Web API kontrolieros. Lūk, kā jūs to varat izdarīt.

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

Šis koda fragments parāda, kā jūs varat izmantot pielāgoto izņēmumu filtru, kuru mēs izveidojām iepriekš, jūsu kontroliera metodei.

[CustomExceptionFilter]

public IEnumerable Get ()

 {

mest jaunu DivideByZeroException ();

 }

ASP.NET Web API atbalsta HttpResponseException izmantošanu izņēmumu apstrādei gan kontroliera, gan darbību līmenī. Kad Web API darbības metode rada neizņemtu izņēmumu, izņēmums tiek tulkots uz HTTP statusa kodu 500, t.i., “Iekšējā servera kļūda”. Ja izmantojat HttpResponseException, klases HttpResponseException konstruktorā varat norādīt statusa kodu, kuru vēlaties atgriezt. Tādā veidā jūs varat pielāgot savus kļūdu kodus, lai padarītu tos nozīmīgākus.

Kā darīt vairāk programmās ASP.NET un ASP.NET Core:

  • Kā izmantot atmiņas kešatmiņu ASP.NET Core
  • Kā rīkoties ar kļūdām ASP.NET Web API
  • Kā pārsūtīt vairākus parametrus Web API kontroliera metodēm
  • Kā reģistrēt pieprasījuma un atbildes metadatus ASP.NET Web API
  • Kā strādāt ar HttpModules ASP.NET
  • Uzlabota versiju veidošana ASP.NET Core Web API
  • Kā izmantot atkarības injekciju ASP.NET Core
  • Kā strādāt ar sesijām ASP.NET
  • Kā strādāt ar HTTPHandleriem ASP.NET
  • Kā izmantot IHostedService ASP.NET Core
  • Kā patērēt WCF SOAP pakalpojumu ASP.NET Core
  • Kā uzlabot ASP.NET Core lietojumprogrammu veiktspēju
  • Kā patērēt ASP.NET Core Web API, izmantojot RestSharp
  • Kā strādāt ar reģistrēšanos ASP.NET Core
  • Kā izmantot MediatR ASP.NET Core
  • Kā strādāt ar sesijas stāvokli ASP.NET Core
  • Kā Nancy izmantot ASP.NET Core
  • Izprotiet parametru saistīšanu ASP.NET Web API
  • Kā augšupielādēt failus ASP.NET Core MVC
  • Kā ieviest globālo izņēmumu apstrādi ASP.NET Core Web API
  • Kā ieviest veselības pārbaudes ASP.NET Core
  • Labākā prakse kešatmiņā ASP.NET
  • Kā izmantot Apache Kafka ziņojumapmaiņu .NET
  • Kā iespējot CORS savā tīmekļa API
  • Kad lietot WebClient pret HttpClient pret HttpWebRequest
  • Kā strādāt ar Redis kešatmiņu .NET
  • Kad .NET izmantot Task.WaitAll pret Task.WhenAll
$config[zx-auto] not found$config[zx-overlay] not found