Programování

Jak zpracovat chyby 404 v ASP.NET Core MVC

ASP.NET Core MVC je protějšek .NET Core rámce ASP.NET MVC pro vytváření multiplatformních, škálovatelných, vysoce výkonných webových aplikací a API pomocí návrhového vzoru Model-View-Controller. Překvapivě, ačkoli ASP.NET Core poskytuje spoustu možností pro řádné zpracování chyb 404, běhové prostředí ASP.NET Core MVC je ve výchozím nastavení nevyužívá.

Výsledkem je, že když webová stránka není nalezena a aplikace vrátí chybu 404, ASP.NET Core MVC představuje pouze obecnou chybovou stránku prohlížeče (jak je znázorněno na obrázku 1 níže). Tento článek pojednává o třech možnostech v ASP.NET Core, které můžeme použít k elegantnějšímu zpracování chyb 404.

Chcete-li pracovat s příklady kódu uvedenými v tomto článku, měli byste mít ve svém systému nainstalovanou Visual Studio 2019. Pokud ještě nemáte kopii, můžete si stáhnout Visual Studio 2019 zde.

Vytvořte projekt ASP.NET Core MVC

Nejprve si vytvořme projekt ASP.NET Core v sadě Visual Studio. Za předpokladu, že je ve vašem systému nainstalovaná sada Visual Studio 2019, postupujte podle níže uvedených kroků a vytvořte nový projekt ASP.NET Core v sadě Visual Studio.

  1. Spusťte Visual Studio IDE.
  2. Klikněte na „Vytvořit nový projekt“.
  3. V okně „Vytvořit nový projekt“ vyberte ze zobrazeného seznamu šablon „Webová aplikace ASP.NET Core“.
  4. Klikněte na Další.
  5. V dalším okně „Konfigurace nového projektu“ zadejte název a umístění nového projektu.
  6. Klikněte na Vytvořit.
  7. V okně „Vytvořit novou webovou aplikaci ASP.NET Core“ vyberte jako běhový modul .NET Core a v rozevíracím seznamu nahoře vyberte ASP.NET Core 3.1 (nebo novější).
  8. Vyberte „Webová aplikace (Model-View-Controller)“ jako šablonu projektu a vytvořte novou aplikaci ASP.NET Core MVC.
  9. Ujistěte se, že políčka „Povolit podporu Dockeru“ a „Konfigurovat pro HTTPS“ nejsou zaškrtnuta, protože zde tyto funkce nebudeme používat.
  10. Ujistěte se, že je ověřování nastaveno na „Bez ověřování“, protože také nebudeme používat ověřování.
  11. Klikněte na Vytvořit.

Následující kroky vytvoří nový projekt ASP.NET Core MVC v sadě Visual Studio 2019. Tento projekt použijeme k ilustraci našich možností zpracování chyb 404 v následujících částech tohoto článku.

Když spustíte projekt ASP.NET Core MVC, který jsme vytvořili v předchozí části, uvidíte domovskou stránku aplikace spolu s uvítací zprávou, jak je znázorněno na obrázku 1 níže.

Zkusme nyní procházet webovou stránku, která neexistuje. Chcete-li to provést, zadejte // localhost: 6440 / welcome do adresního řádku prohlížeče, když je aplikace spuštěna. Když se modulu ASP.NET Core MVC nepodaří najít prostředek pro zadanou adresu URL, vrátí se chyba 404 a zobrazí se vám následující chybová stránka. To není moc elegantní, že?

Zkontrolujte Response.StatusCode v ASP.NET Core MVC

Existuje několik způsobů, jak můžete vylepšit tuto obecnou chybovou stránku. Jednoduchým řešením je zkontrolovat stavový kód HTTP 404 v odpovědi. Pokud je nalezen, můžete ovládací prvek přesměrovat na stránku, která existuje. Následující fragment kódu ilustruje, jak můžete napsat nezbytný kód v metodě Konfigurace třídy Startup k přesměrování na domovskou stránku, pokud došlo k chybě 404.

 app.Use (async (kontext, další) =>

    {

čekat na next ();

if (context.Response.StatusCode == 404)

        {

context.Request.Path = "/ Domů";

čekat na next ();

        }

    });

Nyní, pokud spustíte aplikaci a pokusíte se procházet URL // localhost: 6440 / welcome, budete přesměrováni na domovskou stránku aplikace.

Kompletní kód metody Configure je uveden níže pro vaši potřebu.

public void Configure (aplikace IApplicationBuilder, IWebHostEnvironment env)

        {

if (env.IsDevelopment ())

            {

app.UseDeveloperExceptionPage ();

            }

jiný

            {

app.UseExceptionHandler ("/ Domů / Chyba");

            }

app.Use (async (kontext, další) =>

            {

čekat na next ();

if (context.Response.StatusCode == 404)

                {

context.Request.Path = "/ Domů";

čekat na next ();

                }

            });

app.UseStaticFiles ();

app.UseRouting ();

app.UseAuthorization ();

app.UseEndpoints (endpoints =>

            {

endpoints.MapControllerRoute (

name: "default",

pattern: "{controller = Home} / {action = Index} / {id?}");

            });

        }

Použijte middleware UseStatusCodePages v ASP.NET Core MVC

Druhým řešením pro zpracování chyb 404 v ASP.NET Core je použití integrovaného middlewaru UseStatusCodePages. Následující fragment kódu ukazuje, jak můžete implementovat StatusCodePages v Configure metodě třídy Startup.

public void Configure (aplikace IApplicationBuilder, IWebHostEnvironment env)

        {

app.UseStatusCodePages ();

// Jiný kód

        }

Nyní, když spustíte aplikaci a přejdete na neexistující prostředek, bude výstup podobný obrázku 3.

Použijte UseStatusCodePagesWithReExecute middleware v ASP.NET Core MVC

Můžete využít výhod middlewaru UseStatusCodePagesWithReExecute ke zpracování stavových kódů neúspěchu v případech, kdy nebyl spuštěn proces generování odpovědi. Proto tento middleware nebude zpracovávat chyby stavového kódu HTTP 404 - spíše, když dojde k chybě 404, ovládací prvek bude předán další akci řadiče, která chybu vyřeší.

Následující fragment kódu ukazuje, jak můžete tento middleware použít k přesměrování na jinou metodu akce.

app.UseStatusCodePagesWithReExecute ("/ Home / HandleError / {0}");

Takto by vypadala metoda akce.

[Route ("/ Home / HandleError / {code: int}")]

public IActionResult HandleError (int kód)

{

ViewData ["ErrorMessage"] = $ "Došlo k chybě. Kód chyby je: {code}";

návrat View ("~ / Views / Shared / HandleError.cshtml");

}

Nechám na vás, abyste vytvořili zobrazení HandleError pro zobrazení chybové zprávy.

Nakonec možná budete chtít vytvořit zobrazení konkrétně pro kód chyby. Můžete například vytvořit zobrazení, jako je Home / Error / 500.cshtml nebo Home / Error / 404.cshtml. Poté můžete zkontrolovat chybový kód HTTP a přesměrovat se na příslušnou chybovou stránku.

Ještě dalším způsobem zpracování chyb, které nebyly nalezeny, je použití vlastního zobrazení a odpovídající nastavení chybového kódu. Pokud ve vaší aplikaci dojde k chybě, můžete uživatele přesměrovat na příslušnou chybovou stránku a zobrazit vlastní chybovou zprávu popisující chybu.

Jak dělat více v ASP.NET Core:

  • Jak používat vkládání závislostí ve filtrech akcí v ASP.NET Core 3.1
  • Jak používat vzor možností v ASP.NET Core
  • Jak používat směrování koncových bodů v ASP.NET Core 3.0 MVC
  • Jak exportovat data do aplikace Excel v ASP.NET Core 3.0
  • Jak používat LoggerMessage v ASP.NET Core 3.0
  • Jak odesílat e-maily v ASP.NET Core
  • Jak protokolovat data na SQL Server v ASP.NET Core
  • Jak naplánovat úlohy pomocí Quartz.NET v ASP.NET Core
  • Jak vrátit data z webového rozhraní API ASP.NET Core
  • Jak formátovat data odpovědí v ASP.NET Core
  • Jak konzumovat webové rozhraní API ASP.NET Core pomocí RestSharp
  • Jak provádět asynchronní operace pomocí nástroje Dapper
  • Jak používat příznaky funkcí v ASP.NET Core
  • Jak používat atribut FromServices v ASP.NET Core
  • Jak pracovat s cookies v ASP.NET Core
  • Jak pracovat se statickými soubory v ASP.NET Core
  • Jak používat Middleware pro přepis adres URL v ASP.NET Core
  • Jak implementovat omezení rychlosti v ASP.NET Core
  • Jak používat Azure Application Insights v ASP.NET Core
  • Používání pokročilých funkcí NLog v ASP.NET Core
  • Jak zpracovat chyby v ASP.NET Web API
  • Jak implementovat globální zpracování výjimek v ASP.NET Core MVC
  • Jak zacházet s hodnotami null v ASP.NET Core MVC
  • Pokročilé správy verzí v ASP.NET Core Web API
  • Jak pracovat s pracovními službami v ASP.NET Core
  • Jak používat rozhraní Data Protection API v ASP.NET Core
  • Jak používat podmíněný middleware v ASP.NET Core
  • Jak pracovat se stavem relace v ASP.NET Core
  • Jak psát efektivní řadiče v ASP.NET Core