Ohjelmointi

Kuinka käsitellä virheitä ASP.NET Web API: ssa

Microsoftin ASP.NET-Web-sovellusliittymä on kevyt kehys, jonka avulla voit rakentaa HTTP: llä toimivia valtiottomia RESTful-palveluja. Poikkeukset ovat suorituksen aikana esiintyviä virheitä, ja poikkeusten käsittely on tekniikka, jolla käsitellään ajonaikaisia ​​virheitä sovelluskoodissasi.

Jokaisen ASP.NET-verkkosovellusliittymän kehittäjän tulisi tietää, kuinka käsitellä poikkeuksia Web-sovellusliittymässä ja lähettää asianmukaisia ​​virhekoodeja ja virheilmoituksia Web-sovellusliittymän ohjainmenetelmistä. Seuraavassa osiossa tarkastellaan näiden tehtävien suorittamista.

HttpResponseExceptionin käyttäminen ASP.NET Web API: ssa

Voit käyttää HttpResponseException-luokkaa palauttamaan tietyt HTTP-tilakoodit ja viestit ohjaimen menetelmistä Web-sovellusliittymässä. Tässä on esimerkki.

julkinen työntekijä GetEmployee (int id)

{

Employee emp = työntekijäRepository.Get (id);

jos (emp == null)

    {

var response = uusi HttpResponseMessage (HttpStatusCode.NotFound)

        {

Content = new StringContent ("Työntekijää ei ole", System.Text.Encoding.UTF8, "text / plain"),

StatusCode = HttpStatusCode.NotFound

        }

heittää uusi HttpResponseException (vastaus);

    }

paluu emp;

}

Jos Web-sovellusliittymä palauttaa IHttpActionResult-arvon, kannattaa ehkä kirjoittaa GetEmployee-menetelmä alla olevan kuvan mukaisesti.

public IHttpActionResult GetEmployee (int id)

{

Employee emp = työntekijäRepository.Get (id);

jos (emp == null)

    {

var response = uusi HttpResponseMessage (HttpStatusCode.NotFound)

        {

Content = new StringContent ("Työntekijää ei ole", System.Text.Encoding.UTF8, "text / plain"),

StatusCode = HttpStatusCode.NotFound

        }

heittää uusi HttpResponseException (vastaus);

    }

palaa Ok (emp);

}

Huomaa, että virhekoodi ja virhesanoma on osoitettu vastausobjektille ja että HttpResponseException-ilmentymä palautetaan, kun Web-API-ohjaimen toimintamenetelmässä tapahtuu poikkeus.

HttpErrorin käyttö ASP.NET Web API: ssa

Voit palauttaa mielekkäitä virhekoodeja ja virheilmoituksia Web-API-ohjainmenetelmän CreateErrorResponse-laajennusmenetelmällä. Huomaa, että CreateErrorResponse-menetelmä luo HttpError-objektin ja kääri sen sitten HttpResponseMessage-objektin sisälle.

Seuraava koodiluettelo kuvaa, miten voit käyttää CreateErrorResponse-laajennusmenetelmää Web-API-ohjaimen toimintamenetelmästä.

public IActionResult GetEmployee (int id)

{

Employee emp = työntekijäRepository.Get (id);

jos (emp == null)

    {

string message = "Työntekijää ei ole";

heittää uusi HttpResponseException (

Request.CreateErrorResponse (HttpStatusCode.NotFound, viesti));

    }

palaa Ok (emp);

}

Katso yllä esitetty GetEmployee () -menetelmä. Tämä menetelmä hyväksyy työntekijätunnuksen parametrina ja käyttää tätä tunnusta etsimään ja noutamaan työntekijätietueita työntekijän tietovarasto-ilmentymän avulla. Jos työntekijätietuetta, jolla on määritetty työntekijätunnus, ei löydy, HttpResponseException-ilmentymä heitetään. Huomaa, kuinka asianmukainen virhesanoma ja virhekoodi rakennetaan ennen poikkeuksen esiintymän heittämistä Web API -ohjaimen menetelmästä.

Poikkeussuodattimien käyttö ASP.NET Web API: ssa

Poikkeussuodattimet ovat suodattimia, joita voidaan käyttää käsittelemättömien poikkeusten käsittelemiseen, jotka luodaan Web API -ohjaimen menetelmissä. Toisin sanoen, voit käyttää poikkeussuodattimia kiinni käsittelemättömiin poikkeuksiin Web-sovellusliittymässä, jotka ovat peräisin ohjaimen menetelmistä. Huomaa, että yleinen virhesuodatin on hyvä tapa käsitellä poikkeuksia Web-sovellusliittymässä, jos käsittelemättömiä poikkeuksia heitetään eikä käsitellä ohjaimen menetelmissä.

Poikkeussuodattimen luominen edellyttää IExceptionFilter-käyttöliittymän käyttöönottoa. Voit myös luoda poikkeussuodattimia laajentamalla abstraktia luokkaa ExceptionFilterAttribute ja ohittamalla sitten OnException-menetelmän. Huomaa, että abstrakti ExceptionFilterAttribute-luokka puolestaan ​​toteuttaa IExceptionFilter-käyttöliittymän.

Seuraava koodinpätkä kuvaa, kuinka voit luoda mukautetun poikkeussuodattimen laajentamalla ExceptionFilterAttribute-luokkaa ja ohittamalla sitten OnException-menetelmän. Huomaa, kuinka ohjaimen menetelmien heittämät vakiopoikkeukset kaapataan mukautetun poikkeussuodattimen avulla ja muunnetaan sitten HttpStatusResponse-objektiiksi sopivalla HttpStatusCode-koodilla.

public class CustomExceptionFilter: ExceptionFilterAttribute

    {

public override void OnException (HttpActionExecutedContext actionExecutedContext)

        {

HttpStatusCode status = HttpStatusCode.InternalServerError;

Merkkijonoviesti = String.Empty;

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

jos (poikkeustyyppi == typeof (UnauthorizedAccessException))

            {

message = "Pääsy Web-sovellusliittymään ei ole valtuutettua.";

status = HttpStatusCode.Luvaton;

            }

else if (poikkeustyyppi == typeof (DivideByZeroException))

            {

message = "Sisäinen palvelinvirhe.";

status = HttpStatusCode.InternalServerError;

            }

muu

            {

message = "Ei löydy.";

status = HttpStatusCode.NotFound;

            }

actionExecutedContext.Response = new HttpResponseMessage ()

            {

Content = new StringContent (viesti, System.Text.Encoding.UTF8, "teksti / tavallinen"),

StatusCode = tila

            };

base.OnException (actionExecutedContext);

        }

    }

Sinun tulisi lisätä mukautettu poikkeussuodatin HttpConfiguration-objektin suodatinkokoelmaan.

public static void Register (HttpConfiguration config)

        {

config.MapHttpAttributeRoutes ();

config.Routes.MapHttpRoute (

nimi: "DefaultApi",

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

oletusarvot: uusi {id = RouteParameter.Optional}

            );

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

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

        }

Voit rekisteröidä poikkeussuodattimesi jollakin seuraavista kolmesta tavasta:

  • Toimintatasolla
  • Ohjaimen tasolla
  • Maailmanlaajuisesti

Seuraava koodinpätkä osoittaa, kuinka voit käyttää suodatinta toimintotasolla eli ohjaimen toimintamenetelmässä.

public class EmployeesController: ApiController

{

[NotImplementedExceptionFilter]

julkinen työntekijä GetEmployee (int id)

    {

heittää uusi NotImplementedException ();

    }

}

Jos haluat käyttää poikkeussuodatinta ohjaimen tasolla, sinun on käytettävä suodatinattribuuttia luokan tasolla alla olevan kuvan mukaisesti.

[DatabaseExceptionFilter]

julkisen luokan EmployeesController: ApiController

{

// Joitakin koodeja

}

Voit myös käyttää mukautettua poikkeussuodatinta maailmanlaajuisesti siten, että se toimii kaikissa Web-sovellusliittymien ohjaimissa. Näin voit tehdä tämän.

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

Seuraava koodinpätkä kuvaa, kuinka voit käyttää aiemmin luomamme mukautetun poikkeussuodattimen ohjaintapaan.

[CustomExceptionFilter]

public IEnumerable Get ()

 {

heittää uusi DivideByZeroException ();

 }

ASP.NET-verkkosovellusliittymä tukee HttpResponseExceptionin käyttöä poikkeusten käsittelemiseen sekä ohjaimen tasolla että toimintatasolla. Kun Web-sovellusliittymän toimintamenetelmä heittää kiinni jäämättömän poikkeuksen, poikkeus käännetään HTTP-tilakoodiksi 500, ts. "Sisäinen palvelinvirhe". Jos käytät HttpResponseException-ohjelmaa, voit määrittää palautettavan tilakoodin HttpResponseException-luokan rakentajaan. Tällä tavalla voit mukauttaa virhekoodisi merkityksellisemmiksi.

Kuinka tehdä enemmän ASP.NET- ja ASP.NET Core -sovelluksissa:

  • Kuinka käyttää muistin välimuistia ASP.NET Core -sovelluksessa
  • Kuinka käsitellä virheitä ASP.NET Web API: ssa
  • Kuinka välittää useita parametreja Web-API-ohjaimen menetelmille
  • Kuinka kirjataan pyyntö- ja vastaustiedot, ASP.NET Web API
  • Kuinka työskennellä HttpModulesin kanssa ASP.NET: ssä
  • Edistynyt versiointi ASP.NET Core Web -sovellusliittymässä
  • Kuinka riippuvuusinjektiota käytetään ASP.NET Core -sovelluksessa
  • Kuinka käyttää istuntoja ASP.NET: ssä
  • Kuinka työskennellä HTTPHandlersin kanssa ASP.NET: ssä
  • IHostedServicen käyttäminen ASP.NET Core -sovelluksessa
  • Kuinka käyttää WCF SOAP -palvelua ASP.NET Core -sovelluksessa
  • Kuinka parantaa ASP.NET Core -sovellusten suorituskykyä
  • ASP.NET Core Web -sovellusliittymän kuluttaminen RestSharpin avulla
  • Kuinka kirjautua sisään ASP.NET Core -sovelluksessa
  • Kuinka käyttää MediatR: ää ASP.NET Core -sovelluksessa
  • Istunnon tilan käyttäminen ASP.NET Core -sovelluksessa
  • Kuinka Nancyä käytetään ASP.NET Core -sovelluksessa
  • Ymmärrä parametrien sitominen ASP.NET Web API: ssa
  • Tiedostojen lataaminen ASP.NET Core MVC: hen
  • Kuinka toteuttaa yleinen poikkeusten käsittely ASP.NET Core Web API: ssa
  • Terveystarkastusten toteuttaminen ASP.NET Core -sovelluksessa
  • Parhaat käytännöt välimuistiin tallentamisessa ASP.NET: ssä
  • Apache Kafka -viestien käyttäminen .NET-sovelluksessa
  • Kuinka CORS otetaan käyttöön Web-sovellusliittymässä
  • Milloin käyttää WebClientiä vs. HttpClient vs.HttpWebRequest
  • Kuinka työskennellä Redis-välimuistin kanssa .NET
  • Milloin Task.WaitAll vs. Task.WhenAll on .NET-verkossa