Programovanie

Ako spracovať chyby v webovom rozhraní API ASP.NET

Microsoft ASP.NET Web API je ľahký rámec, ktorý môžete použiť na vytvorenie bezstavových služieb RESTful, ktoré bežia na protokole HTTP. Výnimkou sú chyby, ktoré sa vyskytujú za behu modulu, a spracovanie výnimiek je technika spracovania chýb za behu v kóde vašej aplikácie.

Každý vývojár webového rozhrania ASP.NET by mal vedieť, ako zaobchádzať s výnimkami vo webovom rozhraní API a ako odosielať príslušné chybové kódy a chybové správy z metód radiča webového rozhrania API. V nasledujúcich častiach preskúmame, ako vykonávať tieto úlohy.

Použitie HttpResponseException vo webovom rozhraní API ASP.NET

Triedu HttpResponseException môžete použiť na vrátenie konkrétnych stavových kódov HTTP a správ z metód kontrolóra vo webovom rozhraní API. Tu je príklad.

verejný zamestnanec GetEmployee (int id)

{

Zamestnanec emp = employeeRepository.Get (id);

if (emp == null)

    {

var response = new HttpResponseMessage (HttpStatusCode.NotFound)

        {

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

StatusCode = HttpStatusCode.NotFound

        }

hodiť novú HttpResponseException (odpoveď);

    }

návrat emp;

}

Ak vaše webové rozhranie API vracia IHttpActionResult, možno budete chcieť napísať metódu GetEmployee, ako je uvedené nižšie.

public IHttpActionResult GetEmployee (int id)

{

Zamestnanec emp = employeeRepository.Get (id);

if (emp == null)

    {

var response = new HttpResponseMessage (HttpStatusCode.NotFound)

        {

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

StatusCode = HttpStatusCode.NotFound

        }

hodiť novú HttpResponseException (odpoveď);

    }

návrat Ok (emp);

}

Upozorňujeme, že chybový kód a chybové hlásenie sú priradené objektu odpovede a že inštancia HttpResponseException sa vráti, keď sa v metóde akcie ovládača webového API vyskytne výnimka.

Používanie HttpError vo webovom API ASP.NET

Môžete použiť metódu rozšírenia CreateErrorResponse vo svojej metóde radiča webového API na vrátenie zmysluplných chybových kódov a chybových správ. Upozorňujeme, že metóda CreateErrorResponse vytvorí objekt HttpError a potom ho zabalí do objektu HttpResponseMessage.

Nasledujúci zoznam kódov ilustruje, ako môžete použiť metódu rozšírenia CreateErrorResponse z metódy akcie vášho ovládača webového API.

public IActionResult GetEmployee (int id)

{

Zamestnanec emp = employeeRepository.Get (id);

if (emp == null)

    {

string message = "Zamestnanec neexistuje";

hodiť novú HttpResponseException (

Request.CreateErrorResponse (HttpStatusCode.NotFound, správa));

    }

návrat Ok (emp);

}

Pozrite si metódu GetEmployee () uvedenú vyššie. Táto metóda prijíma ID zamestnanca ako parameter a používa ho na vyhľadávanie a načítanie záznamu zamestnanca pomocou inštancie úložiska zamestnancov. Ak sa záznam zamestnanca so zadaným ID zamestnanca nenájde, je vyvolaná inštancia HttpResponseException. Všimnite si, ako sú príslušné chybové hlásenia a chybové kódy zostavené predtým, ako je vyvolaná inštancia výnimky z metódy radiča webového API.

Používanie filtrov výnimiek vo webovom rozhraní API ASP.NET

Filtre výnimiek sú filtre, ktoré sa dajú použiť na spracovanie nespracovaných výnimiek, ktoré sa generujú v metódach radiča vášho webového rozhrania API. Inými slovami, filtre výnimiek môžete použiť na zachytenie nespracovaných výnimiek vo webovom rozhraní API, ktoré pochádzajú z vašich metód radiča. Upozorňujeme, že globálny filter chýb je dobrým prístupom k spracovaniu výnimiek vo vašom webovom rozhraní API, ak sú nespracované výnimky vyvolané a nespracovávajú sa v metódach radiča.

Ak chcete vytvoriť filter výnimiek, musíte implementovať rozhranie IExceptionFilter. Filtre výnimiek môžete vytvoriť aj rozšírením abstraktnej triedy ExceptionFilterAttribute a následným prepísaním metódy OnException. Všimnite si, že abstraktná trieda ExceptionFilterAttribute implementuje rozhranie IExceptionFilter.

Nasledujúci úryvok kódu ilustruje, ako môžete vytvoriť vlastný filter výnimiek rozšírením triedy ExceptionFilterAttribute a následným prepísaním metódy OnException. Všimnite si, ako sú štandardné výnimky vyvolané vašimi metódami radiča zachytené filtrom vlastných výnimiek a potom prevedené na objekty HttpStatusResponse s príslušným HttpStatusCode.

verejná trieda CustomExceptionFilter: ExceptionFilterAttribute

    {

verejné prepísanie void OnException (HttpActionExecutedContext actionExecutedContext)

        {

Stav HttpStatusCode = HttpStatusCode.InternalServerError;

String message = String.Empty;

var exceptionType = actionExecutedContext.Exception.GetType ();

if (exceptionType == typeof (UnauthorizedAccessException))

            {

message = "Prístup k webovému API nie je autorizovaný.";

status = HttpStatusCode.Unauthorized;

            }

else if (exceptionType == typeof (DivideByZeroException))

            {

message = "Interná chyba servera.";

status = HttpStatusCode.InternalServerError;

            }

inak

            {

message = "Nenašiel sa.";

status = HttpStatusCode.NotFound;

            }

actionExecutedContext.Response = nový HttpResponseMessage ()

            {

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

StatusCode = stav

            };

base.OnException (actionExecutedContext);

        }

    }

Mali by ste pridať filter vlastných výnimiek do kolekcie filtrov objektu HttpConfiguration.

verejný statický neplatný register (konfigurácia HttpConfiguration)

        {

config.MapHttpAttributeRoutes ();

config.Routes.MapHttpRoute (

názov: "DefaultApi",

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

predvolené hodnoty: new {id = RouteParameter.Optional}

            );

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

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

        }

Filtre výnimiek môžete zaregistrovať jedným z nasledujúcich troch spôsobov:

  • Na akčnej úrovni
  • Na úrovni ovládača
  • Globálne

Nasledujúci úryvok kódu ukazuje, ako môžete použiť filter na úrovni akcie, t. J. Na metódu akcie ovládača.

verejná trieda EmployeesController: ApiController

{

[NotImplementedExceptionFilter]

verejný zamestnanec GetEmployee (int id)

    {

hodiť nový NotImplementedException ();

    }

}

Ak chcete použiť filter výnimiek na úrovni radiča, budete musieť použiť atribút filter na úrovni triedy, ako je uvedené nižšie.

[DatabaseExceptionFilter]

verejná trieda EmployeesController: ApiController

{

// Nejaký kód

}

Môžete tiež globálne použiť vlastný filter výnimiek, aby fungoval pre všetky radiče webového rozhrania API. Takto to môžete urobiť.

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

Nasledujúci úryvok kódu ilustruje, ako môžete na svoju metódu ovládača použiť vlastný filter výnimiek, ktorý sme vytvorili predtým.

[CustomExceptionFilter]

verejné IEnumerable Get ()

 {

hodiť novú DivideByZeroException ();

 }

Webové API ASP.NET podporuje použitie HttpResponseException na spracovanie výnimiek na úrovni radiča aj na úrovni akcie. Keď metóda akcie vo webovom rozhraní API vyvolá nezachytenú výnimku, výnimka sa preloží do HTTP Status Code 500, t. J. „Internal Server Error“. Ak používate HttpResponseException, môžete určiť stavový kód, ktorý chcete vrátiť, v konštruktore triedy HttpResponseException. Týmto spôsobom môžete prispôsobiť chybové kódy tak, aby boli zmysluplnejšie.

Ako urobiť viac v ASP.NET a ASP.NET Core:

  • Ako používať ukladanie do pamäte cache v ASP.NET Core
  • Ako spracovať chyby v webovom rozhraní API ASP.NET
  • Ako odovzdať viaceré parametre metódam radiča webového API
  • Ako prihlásiť metadáta požiadaviek a odpovedí do webového rozhrania ASP.NET Web API
  • Ako pracovať s HttpModules v ASP.NET
  • Pokročilé spravovanie verzií v webovom rozhraní API ASP.NET Core
  • Ako používať vkladanie závislostí v ASP.NET Core
  • Ako pracovať s reláciami v ASP.NET
  • Ako pracovať s HTTPHandlers v ASP.NET
  • Ako používať IHostedService v ASP.NET Core
  • Ako spotrebovať službu WCF SOAP v ASP.NET Core
  • Ako zlepšiť výkon aplikácií ASP.NET Core
  • Ako konzumovať webové rozhranie API ASP.NET Core pomocou nástroja RestSharp
  • Ako pracovať s prihlásením do ASP.NET Core
  • Ako používať MediatR v ASP.NET Core
  • Ako pracovať so stavom relácie v ASP.NET Core
  • Ako používať Nancy v ASP.NET Core
  • Pochopte väzbu parametrov vo webovom rozhraní API ASP.NET
  • Ako nahrávať súbory v ASP.NET Core MVC
  • Ako implementovať globálne spracovanie výnimiek v webovom rozhraní API ASP.NET Core
  • Ako implementovať kontroly stavu v ASP.NET Core
  • Najlepšie postupy pri ukladaní do pamäte cache v ASP.NET
  • Ako používať zasielanie správ Apache Kafka v .NET
  • Ako povoliť CORS vo vašom webovom rozhraní API
  • Kedy použiť WebClient vs. HttpClient vs. HttpWebRequest
  • Ako pracovať s Redis Cache v .NET
  • Kedy použiť Task.WaitAll vs. Task.WhenAll v .NET
$config[zx-auto] not found$config[zx-overlay] not found