Kako postupati s pogreškama 404 u ASP.NET Core MVC

ASP.NET Core MVC je .NET Core pandan ASP.NET MVC okviru za izgradnju različitih platformi, skalabilnih web aplikacija i API-ja visokih performansi koristeći obrazac dizajna Model-View-Controller. Iznenađujuće, iako ASP.NET Core pruža mnoštvo mogućnosti za graciozno rukovanje 404 pogreškama, ASP.NET Core MVC vrijeme izvođenja ne koristi ih prema zadanim postavkama.

Kao rezultat toga, kada web stranica ne pronađe i aplikacija vrati pogrešku 404, ASP.NET Core MVC prikazuje samo stranicu s generičkom pogreškom preglednika (kao što je prikazano na slici 1 dolje). Ovaj članak razmatra tri mogućnosti u ASP.NET Coreu koje možemo koristiti za gracioznije postupanje s pogreškama 404.

Da biste radili s primjerima koda iz ovog članka, u sustavu biste trebali instalirati Visual Studio 2019. Ako još nemate kopiju, ovdje možete preuzeti Visual Studio 2019.

Stvorite ASP.NET Core MVC projekt

Prvo, kreirajmo ASP.NET Core projekt u Visual Studiju. Pod pretpostavkom da je Visual Studio 2019 instaliran u vašem sustavu, slijedite korake opisane u nastavku da biste u Visual Studiou stvorili novi ASP.NET Core projekt.

  1. Pokrenite Visual Studio IDE.
  2. Kliknite "Stvori novi projekt".
  3. U prozoru "Stvori novi projekt" s popisa predložaka odaberite "ASP.NET Core Web Application".
  4. Kliknite Dalje. 
  5. U sljedećem prozoru "Konfiguriranje novog projekta" navedite naziv i mjesto za novi projekt.
  6. Kliknite Stvori.
  7. U prozoru "Stvaranje nove web-aplikacije ASP.NET Core" odaberite .NET Core kao vrijeme izvođenja i ASP.NET Core 3.1 (ili noviju) s padajućeg popisa na vrhu.
  8. Odaberite „Web aplikacija (Model-View-Controller)“ kao predložak projekta za stvaranje nove ASP.NET Core MVC aplikacije.
  9. Obavezno označite potvrdne okvire "Omogući podršku za Docker" i "Konfiguriraj za HTTPS" jer ovdje nećemo koristiti te značajke.
  10. Provjerite je li provjera autentičnosti postavljena na "Bez provjere autentičnosti" jer ni mi nećemo koristiti provjeru autentičnosti.
  11. Kliknite Stvori.

Slijedeći ove korake stvorit će se novi ASP.NET Core MVC projekt u Visual Studio 2019. Ovaj ćemo projekt koristiti za ilustraciju naših 404 mogućnosti rukovanja pogreškama u sljedećim odjeljcima ovog članka.

Kada izvršite ASP.NET Core MVC projekt koji smo kreirali u prethodnom odjeljku, vidjet ćete početnu stranicu aplikacije zajedno s porukom dobrodošlice kao što je prikazano na slici 1 dolje. 

Pokušajmo sada pregledavati web stranicu koja ne postoji. Da biste to učinili, upišite // localhost: 6440 / welcome u adresnu traku vašeg preglednika dok je aplikacija u izvršenju. Kada ASP.NET Core MVC mehanizam ne uspije locirati resurs za navedeni URL, vratit će se pogreška 404 i prikazat će vam se sljedeća stranica pogreške. To nije baš elegantno, zar ne?

Provjerite Response.StatusCode u ASP.NET Core MVC

Postoji nekoliko načina na koje možete poboljšati ovu stranicu generičke pogreške. Jednostavno rješenje je provjeriti HTTP statusni kod 404 u odgovoru. Ako se pronađe, možete preusmjeriti kontrolu na stranicu koja postoji. Sljedeći isječak koda ilustrira kako možete napisati potreban kôd u metodi Konfiguriranje klase Startup za preusmjeravanje na početnu stranicu ako se dogodila pogreška 404.

 app.Use (async (context, next) =>

    {

        čekati next ();

        ako (context.Response.StatusCode == 404)

        {

            context.Request.Path = "/ Početna";

            čekati next ();

        }

    });

Sada ako izvršite aplikaciju i pokušate pregledati URL // localhost: 6440 / welcome, bit ćete preusmjereni na početnu stranicu aplikacije.

Kompletni kod metode Konfiguracija dan je u nastavku za vašu referencu.

javna void konfiguracija (aplikacija IApplicationBuilder, IWebHostEnvironment env)

        {

            if (env.IsDevelopment ())

            {

                app.UseDeveloperExceptionPage ();

            }

            drugo

            {

                app.UseExceptionHandler ("/ Početna / Pogreška");

            }

            app.Use (async (context, next) =>

            {

                čekati next ();

                ako (context.Response.StatusCode == 404)

                {

                    context.Request.Path = "/ Početna";

                    čekati next ();

                }

            });

            app.UseStaticFiles ();

            app.UseRouting ();

            app.UseAuthorization ();

            app.UseEndpoints (krajnje točke =>

            {

                krajnje točke.MapControllerRoute (

                    ime: "zadani",

                    obrazac: "{kontroler = Početna} / {akcija = Indeks} / {id?}");

            });

        }

Upotrijebite posrednički softver UseStatusCodePages u ASP.NET Core MVC

Drugo rješenje za rješavanje pogrešaka 404 u ASP.NET Core je upotreba ugrađenog posredničkog softvera UseStatusCodePages. Sljedeći isječak koda pokazuje kako možete implementirati StatusCodePages u metodu Konfiguriranje klase Startup.

javna void konfiguracija (aplikacija IApplicationBuilder, IWebHostEnvironment env)

        {

            app.UseStatusCodePages ();

            // Ostali kod

        }

Sada kada izvršite aplikaciju i pregledate nepostojeći resurs, izlaz će biti sličan slici 3.

Upotrijebite UseStatusCodePagesWithReExecute međuprodukt u ASP.NET Core MVC

Možete koristiti UseStatusCodePagesWithReExecute posrednički softver za rukovanje kodovima neuspjeha u slučajevima kada postupak generiranja odgovora nije pokrenut. Stoga ovaj posrednički softver neće obrađivati ​​pogreške kodova HTTP 404 statusa - već će se, kada se dogodi pogreška 404, kontrola proslijediti drugoj radnji kontrolera za rukovanje pogreškom.

Sljedeći isječak koda ilustrira kako možete koristiti ovaj međuprodukt za preusmjeravanje na drugu metodu radnje.

app.UseStatusCodePagesWithReExecute ("/ Početna / Pogreška ručke / {0}");

Evo kako bi izgledala metoda djelovanja.

[Ruta ("/ Početna / Pogreška ručice / {kod: int}")]

javna IActionResult HandleError (int kod)

{

   ViewData ["ErrorMessage"] = $ "Dogodila se pogreška. Kôd pogreške je: {code}";

   return View ("~ / Views / Shared / HandleError.cshtml");

}

Ostavljam vama da stvorite prikaz HandleError za prikaz poruke o pogrešci.

Na kraju, možda biste trebali stvoriti poglede posebno za kôd pogreške. Na primjer, možete stvoriti prikaze poput Home / Error / 500.cshtml ili Home / Error / 404.cshtml. Tada biste mogli provjeriti HTTP kôd pogreške i preusmjeriti na odgovarajuću stranicu pogreške.

Još jedan način rukovanja pogreškama stranice koje nisu pronađene jest korištenje prilagođenog prikaza i odgovarajuće postavljanje koda pogreške. Kada se u vašoj aplikaciji dogodi pogreška, mogli biste preusmjeriti korisnika na odgovarajuću stranicu pogreške i prikazati svoju prilagođenu poruku pogreške koja opisuje pogrešku.

Kako učiniti više u ASP.NET Coreu:

  • Kako se koristi injekcija ovisnosti u akcijskim filtrima u ASP.NET Core 3.1
  • Kako se koristi obrazac opcija u ASP.NET Core
  • Kako se koristi usmjeravanje krajnje točke u ASP.NET Core 3.0 MVC
  • Kako izvesti podatke u Excel u ASP.NET Core 3.0
  • Kako koristiti LoggerMessage u ASP.NET Core 3.0
  • Kako poslati e-poštu u ASP.NET Core
  • Kako prijaviti podatke na SQL Server u ASP.NET Core
  • Kako rasporediti poslove pomoću Quartz.NET-a u ASP.NET Core
  • Kako vratiti podatke s ASP.NET Core Web API-ja
  • Kako oblikovati podatke o odgovoru u ASP.NET Core
  • Kako konzumirati ASP.NET Core Web API pomoću RestSharp
  • Kako izvesti asinkrne operacije pomoću Dappera
  • Kako koristiti zastavice značajki u ASP.NET Coreu
  • Kako koristiti atribut FromServices u ASP.NET Core
  • Kako raditi s kolačićima u ASP.NET Coreu
  • Kako raditi sa statičkim datotekama u ASP.NET Coreu
  • Kako koristiti URL za prepisivanje Middlewarea u ASP.NET Core
  • Kako implementirati ograničenje brzine u ASP.NET Core
  • Kako koristiti Azure Application Insights u ASP.NET Core
  • Korištenje naprednih značajki NLog u ASP.NET Core
  • Kako postupati s pogreškama u ASP.NET web API-ju
  • Kako implementirati globalno rukovanje iznimkama u ASP.NET Core MVC
  • Kako postupati s null vrijednostima u ASP.NET Core MVC
  • Napredna verzija u ASP.NET Core Web API
  • Kako raditi s uslugama za radnike u ASP.NET Coreu
  • Kako koristiti API zaštite podataka u ASP.NET Core
  • Kako se koristi uvjetni međuprodukt u ASP.NET Coreu
  • Kako raditi sa stanjem sesije u ASP.NET Coreu
  • Kako napisati učinkovite kontrolere u ASP.NET Core