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