Programavimas

Kaip tvarkyti 404 klaidas ASP.NET Core MVC

ASP.NET Core MVC yra .NET Core atitikmuo ASP.NET MVC sistemoje, skirtoje kurti daugiaplatformes, keičiamo dydžio, didelio našumo žiniatinklio programas ir API, naudojant „Model-View-Controller“ dizaino modelį. Stebina tai, kad nors ASP.NET Core suteikia daugybę galimybių tvarkyti 404 klaidas, ASP.NET Core MVC vykdymo laikas pagal numatytuosius nustatymus jomis nepasinaudoja.

Dėl to, kai tinklalapis nerandamas ir programa pateikia 404 klaidą, ASP.NET Core MVC pateikia tik bendrą naršyklės klaidos puslapį (kaip parodyta toliau pateiktame 1 paveiksle). Šiame straipsnyje aptariamos trys ASP.NET Core parinktys, kurias galime naudoti 404 klaidoms tvarkyti tvarkingiau.

Norėdami dirbti su šiame straipsnyje pateiktais kodų pavyzdžiais, sistemoje turite būti įdiegę „Visual Studio 2019“. Jei dar neturite kopijos, galite atsisiųsti „Visual Studio 2019“ čia.

Sukurkite ASP.NET Core MVC projektą

Pirmiausia sukurkime ASP.NET Core projektą „Visual Studio“. Darant prielaidą, kad „Visual Studio 2019“ yra įdiegta jūsų sistemoje, atlikite toliau nurodytus veiksmus, kad sukurtumėte naują „ASP.NET Core“ projektą „Visual Studio“.

  1. Paleiskite „Visual Studio IDE“.
  2. Spustelėkite „Sukurti naują projektą“.
  3. Lange „Kurti naują projektą“ iš rodomų šablonų sąrašo pasirinkite „ASP.NET Core Web Application“.
  4. Spustelėkite Pirmyn.
  5. Tada rodomame lange „Konfigūruoti naują projektą“ nurodykite naujo projekto pavadinimą ir vietą.
  6. Spustelėkite Sukurti.
  7. Lange „Sukurti naują ASP.NET pagrindinę žiniatinklio programą“ viršuje esančiame išskleidžiamajame sąraše pasirinkite .NET Core kaip vykdymo laiką ir ASP.NET Core 3.1 (ar naujesnę).
  8. Norėdami sukurti naują ASP.NET Core MVC programą, kaip projekto šabloną pasirinkite „Web Application (Model-View-Controller)“.
  9. Įsitikinkite, kad nepažymėti žymės langeliai „Įgalinti„ Docker “palaikymą“ ir „Konfigūruoti HTTPS“, nes čia nenaudosime tų funkcijų.
  10. Įsitikinkite, kad autentifikavimas nustatytas kaip „Nėra autentifikavimo“, nes mes taip pat nenaudosime autentifikavimo.
  11. Spustelėkite Sukurti.

Atlikę šiuos veiksmus, „Visual Studio 2019“ sukursite naują ASP.NET Core MVC projektą. Šį projektą naudosime iliustruodami 404 klaidų tvarkymo parinktis tolesniuose šio straipsnio skyriuose.

Vykdydami ankstesniame skyriuje sukurtą ASP.NET Core MVC projektą pamatysite pagrindinį programos puslapį kartu su pasveikinimo pranešimu, kaip parodyta 1 paveiksle.

Dabar pabandykime naršyti neegzistuojantį tinklalapį. Norėdami tai padaryti, naršyklės adreso juostoje įveskite // localhost: 6440 / welcome, kol programa vykdoma. Kai ASP.NET Core MVC variklis neranda nurodyto URL išteklių, bus grąžinta 404 klaida ir jums bus pateiktas šis klaidos puslapis. Tai nėra labai elegantiška, ar ne?

Patikrinkite „Response.StatusCode“ ASP.NET Core MVC

Yra keli būdai, kaip galite patobulinti šį bendrosios klaidos puslapį. Paprastas sprendimas yra patikrinti HTTP būsenos kodą 404 atsakyme. Jei bus rasta, galite nukreipti valdiklį į esamą puslapį. Šis kodo fragmentas iliustruoja, kaip galite užrašyti reikiamą kodą „Startup“ klasės „Konfigūruoti“ metodo nukreipimui į pagrindinį puslapį, jei įvyko 404 klaida.

 programa. Naudokite (async (context, next) =>

    {

laukti kito ();

jei (kontekstas.Response.StatusCode == 404)

        {

context.Request.Path = "/ Namai";

laukti kito ();

        }

    });

Dabar, jei vykdote programą ir bandote naršyti URL // localhost: 6440 / welcome, būsite nukreipti į pagrindinį programos puslapį.

Pilnas metodo „Konfigūruoti“ kodas pateikiamas toliau.

public void Configure (programa „IApplicationBuilder“, „IWebHostEnvironment env“)

        {

jei (env.IsDevelopment ())

            {

app.UseDeveloperExceptionPage ();

            }

Kitas

            {

app.UseExceptionHandler ("/ Pagrindinis / Klaida");

            }

programa. Naudokite (async (context, next) =>

            {

laukti kito ();

jei (kontekstas.Response.StatusCode == 404)

                {

context.Request.Path = "/ Namai";

laukti kito ();

                }

            });

app.UseStaticFiles ();

app.UseRouting ();

app.UseAuthorization ();

app.UseEndpoints (pabaigos taškai =>

            {

galutiniai taškai. „MapControllerRoute“ (

pavadinimas: „numatytasis“,

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

            });

        }

ASP.NET Core MVC naudokite tarpinę programinę įrangą „UseStatusCodePages“

Antras sprendimas 404 klaidoms tvarkyti ASP.NET Core yra naudojant įmontuotą „UseStatusCodePages“ tarpinę programinę įrangą. Šis kodo fragmentas rodo, kaip galite įdiegti „StatusCodePages“ paleidimo klasės konfigūravimo metodą.

public void Configure (programa „IApplicationBuilder“, „IWebHostEnvironment env“)

        {

app.UseStatusCodePages ();

// Kitas kodas

        }

Dabar, kai vykdote programą ir naršote neegzistuojantį šaltinį, išvestis bus panaši į 3 paveikslą.

ASP.NET Core MVC naudokite tarpinę programinę įrangą UseStatusCodePagesWithReExecute

Galite naudoti tarpinės programinės įrangos „UseStatusCodePagesWithReExecute“ pranašumus tvarkydami nesėkmės būsenos kodus tais atvejais, kai atsakymo generavimo procesas dar nepradėtas. Taigi ši tarpinė programinė įranga netvarkys HTTP 404 būsenos kodo klaidų, o įvykus 404 klaidai, valdiklis bus perduotas kitam valdiklio veiksmui, kad būtų pašalinta klaida.

Šis kodo fragmentas parodo, kaip galite naudoti šią tarpinę programinę įrangą peradresuoti į kitą veiksmo metodą.

app.UseStatusCodePagesWithReExecute ("/ Pagrindinis /„ HandleError “/ {0}");

Štai kaip atrodytų veiksmo metodas.

[Maršrutas ("/ Pagrindinis /„ HandleError “/ {kodas: int}")]

public IActionResult HandleError (int kodas)

{

ViewData ["ErrorMessage"] = $ "Įvyko klaida. Klaidos kodas yra: {code}";

grįžti View ("~ / Views / Shared / HandleError.cshtml");

}

Palieku jums sukurti rodinį „HandleError“, kad būtų rodomas klaidos pranešimas.

Galiausiai, galbūt norėsite sukurti specialiai klaidos kodo rodinius. Pvz., Galite sukurti tokius rodinius kaip Pagrindinis / Klaida / 500.cshtml arba Pagrindinis / Klaida / 404.cshtml. Tada galite patikrinti HTTP klaidos kodą ir nukreipti į atitinkamą klaidos puslapį.

Dar vienas būdas nerasti puslapio klaidų yra naudoti pasirinktinį rodinį ir tinkamai nustatyti klaidos kodą. Kai jūsų programoje įvyksta klaida, galite nukreipti vartotoją į atitinkamą klaidos puslapį ir rodyti pasirinktinį klaidos pranešimą, apibūdinantį klaidą.

Kaip padaryti daugiau naudojant „ASP.NET Core“:

  • Kaip naudoti priklausomybės įpurškimą veiksmo filtruose ASP.NET Core 3.1
  • Kaip naudoti ASP.NET Core parinkčių modelį
  • Kaip naudoti galinių taškų nukreipimą ASP.NET Core 3.0 MVC
  • Kaip eksportuoti duomenis į „Excel“ naudojant ASP.NET Core 3.0
  • Kaip naudoti „LoggerMessage“ ASP.NET Core 3.0
  • Kaip siųsti el. Laiškus naudojant ASP.NET Core
  • Kaip registruoti duomenis į „SQL Server“ naudojant ASP.NET Core
  • Kaip suplanuoti darbus naudojant „Quartz.NET“ ASP.NET Core
  • Kaip grąžinti duomenis iš ASP.NET Core Web API
  • Kaip formatuoti atsakymo duomenis ASP.NET Core
  • Kaip suvartoti ASP.NET Core Web API naudojant „RestSharp“
  • Kaip atlikti asinchronines operacijas naudojant „Dapper“
  • Kaip naudoti funkcijų žymes „ASP.NET Core“
  • Kaip naudoti „FromServices“ atributą „ASP.NET Core“
  • Kaip dirbti su slapukais ASP.NET Core
  • Kaip dirbti su statiniais failais sistemoje ASP.NET Core
  • Kaip naudoti URL perrašymo tarpinę programinę įrangą ASP.NET Core
  • Kaip įdiegti normos ribojimą ASP.NET Core
  • Kaip naudoti „Azure Application Insights“ ASP.NET Core
  • Išplėstinių „NLog“ funkcijų naudojimas „ASP.NET Core“
  • Kaip tvarkyti klaidas ASP.NET žiniatinklio API
  • Kaip įdiegti visuotinį išimčių tvarkymą ASP.NET Core MVC
  • Kaip tvarkyti nulines reikšmes ASP.NET Core MVC
  • Išplėstinė ASP.NET „Core Web API“ versijų versija
  • Kaip dirbti su darbuotojų paslaugomis ASP.NET Core
  • Kaip naudoti duomenų apsaugos API ASP.NET Core
  • Kaip naudoti sąlyginę tarpinę programinę įrangą ASP.NET Core
  • Kaip dirbti su seanso būsena ASP.NET Core
  • Kaip rašyti efektyvius valdiklius ASP.NET Core
$config[zx-auto] not found$config[zx-overlay] not found