Programmering

Sådan håndteres 404 fejl i ASP.NET Core MVC

ASP.NET Core MVC er .NET Core-modstykket til ASP.NET MVC-rammen til opbygning af platforme, skalerbare, højtydende webapplikationer og API'er ved hjælp af Model-View-Controller-designmønsteret. Overraskende nok, selvom ASP.NET Core giver masser af muligheder for at håndtere 404 fejl yndefuldt, udnytter ASP.NET Core MVC-runtime dem ikke som standard.

Som et resultat, når en webside ikke findes, og en 404-fejl returneres af applikationen, præsenterer ASP.NET Core MVC kun en generisk browserfejlside (som vist i figur 1 nedenfor). Denne artikel diskuterer tre muligheder i ASP.NET Core, som vi kan bruge til at håndtere 404 fejl mere yndefuldt.

For at arbejde med kodeeksemplerne i denne artikel skal du have Visual Studio 2019 installeret i dit system. Hvis du ikke allerede har en kopi, kan du downloade Visual Studio 2019 her.

Opret et ASP.NET Core MVC-projekt

Lad os først starte med at oprette et ASP.NET Core-projekt i Visual Studio. Forudsat at Visual Studio 2019 er installeret i dit system, skal du følge trinene beskrevet nedenfor for at oprette et nyt ASP.NET Core-projekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klik på "Opret nyt projekt."
  3. I vinduet "Opret nyt projekt" skal du vælge "ASP.NET Core Web Application" fra listen over skabeloner, der vises.
  4. Klik på Næste.
  5. I vinduet "Konfigurer dit nye projekt", der vises nedenfor, skal du angive navnet og placeringen for det nye projekt.
  6. Klik på Opret.
  7. I vinduet "Opret en ny ASP.NET Core-webapplikation" skal du vælge .NET Core som runtime og ASP.NET Core 3.1 (eller nyere) fra rullelisten øverst.
  8. Vælg "Webapplikation (Model-View-Controller)" som projektskabelon for at oprette et nyt ASP.NET Core MVC-program.
  9. Sørg for, at afkrydsningsfelterne "Aktivér Docker-support" og "Konfigurer til HTTPS" ikke er markeret, da vi ikke bruger disse funktioner her.
  10. Sørg for, at godkendelse er indstillet til "Ingen godkendelse", da vi heller ikke bruger godkendelse.
  11. Klik på Opret.

Ved at følge disse trin oprettes et nyt ASP.NET Core MVC-projekt i Visual Studio 2019. Vi bruger dette projekt til at illustrere vores 404 fejlhåndteringsmuligheder i de efterfølgende afsnit i denne artikel.

Når du udfører ASP.NET Core MVC-projektet, som vi har oprettet i det foregående afsnit, vil du se programmets startside sammen med velkomstmeddelelsen som vist i figur 1 nedenfor.

Lad os nu prøve at gennemse en webside, der ikke findes. For at gøre dette skal du skrive // ​​localhost: 6440 / welcome i adresselinjen i din browser, mens applikationen udføres. Når ASP.NET Core MVC-motoren ikke finder ressourcen til den angivne URL, returneres en 404-fejl, og du får vist følgende fejlside. Det er ikke særlig elegant, er det?

Kontroller Response.StatusCode i ASP.NET Core MVC

Der er flere måder, du kan forbedre på denne generiske fejlside. En simpel løsning er at kontrollere HTTP-statuskoden 404 i svaret. Hvis de findes, kan du omdirigere kontrollen til en eksisterende side. Følgende kodestykke illustrerer, hvordan du kan skrive den nødvendige kode i konfigurationsmetoden i opstartklassen for at omdirigere til hjemmesiden, hvis der er opstået en 404-fejl.

 app.Use (async (kontekst, næste) =>

    {

afvente næste ();

hvis (context.Response.StatusCode == 404)

        {

context.Request.Path = "/ Hjem";

afvente næste ();

        }

    });

Hvis du nu udfører applikationen og prøver at gennemse URL'en // localhost: 6440 / welcome, omdirigeres du til applikationens startside.

Den komplette kode for konfigurationsmetoden er angivet nedenfor til din reference.

public void Configure (IApplicationBuilder app, IWebHostEnvironment env)

        {

hvis (env.IsDevelopment ())

            {

app.UseDeveloperExceptionPage ();

            }

andet

            {

app.UseExceptionHandler ("/ Hjem / Fejl");

            }

app.Use (async (kontekst, næste) =>

            {

afvente næste ();

hvis (context.Response.StatusCode == 404)

                {

context.Request.Path = "/ Hjem";

afvente næste ();

                }

            });

app.UseStaticFiles ();

app.UseRouting ();

app.UseAuthorization ();

app.UseEndpoints (slutpunkter =>

            {

endpoints.MapControllerRoute (

navn: "standard",

mønster: "{controller = Home} / {action = Index} / {id?}");

            });

        }

Brug UseStatusCodePages middleware i ASP.NET Core MVC

En anden løsning til håndtering af 404-fejl i ASP.NET Core er ved hjælp af den indbyggede UseStatusCodePages middleware. Følgende kodestykke viser, hvordan du kan implementere StatusCodePages i konfigurationsmetoden i opstartklassen.

public void Configure (IApplicationBuilder app, IWebHostEnvironment env)

        {

app.UseStatusCodePages ();

// Anden kode

        }

Nu når du udfører applikationen og søger til den ikke-eksisterende ressource, vil outputen være den samme som figur 3.

Brug UseStatusCodePagesWithReExecute middleware i ASP.NET Core MVC

Du kan drage fordel af UseStatusCodePagesWithReExecute middleware til at håndtere ikke-succes statuskoder i tilfælde, hvor processen med at generere svaret ikke er startet. Derfor håndterer denne middleware ikke HTTP 404 statuskodefejl - når en 404-fejl opstår, vil kontrollen blive sendt til en anden controllerhandling for at håndtere fejlen.

Følgende kodestykke illustrerer, hvordan du kan bruge denne middleware til at omdirigere til en anden handlingsmetode.

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

Sådan ser handlingsmetoden ud.

[Rute ("/ Hjem / HandleError / {kode: int}")]

offentlig IActionResult HandleError (int-kode)

{

ViewData ["ErrorMessage"] = $ "Der opstod en fejl. ErrorCode er: {code}";

returner visning ("~ / Views / Shared / HandleError.cshtml");

}

Jeg overlader til dig at oprette visningen HandleError for at vise fejlmeddelelsen.

Endelig vil du muligvis oprette visninger specifikt til en fejlkode. For eksempel kan du oprette visninger såsom Hjem / Fejl / 500.cshtml eller Hjem / Fejl / 404.cshtml. Du kan derefter kontrollere HTTP-fejlkoden og omdirigere til den relevante fejlside.

Endnu en anden måde at håndtere fejl, der ikke er fundet på siden, er ved at bruge en brugerdefineret visning og indstille fejlkoden korrekt. Når der opstår en fejl i dit program, kan du omdirigere brugeren til den relevante fejlside og vise din brugerdefinerede fejlmeddelelse, der beskriver fejlen.

Sådan gør du mere i ASP.NET Core:

  • Sådan bruges afhængighedsindsprøjtning i handlingsfiltre i ASP.NET Core 3.1
  • Sådan bruges indstillingsmønsteret i ASP.NET Core
  • Sådan bruges slutpunktsrute i ASP.NET Core 3.0 MVC
  • Sådan eksporteres data til Excel i ASP.NET Core 3.0
  • Sådan bruges LoggerMessage i ASP.NET Core 3.0
  • Sådan sendes e-mails i ASP.NET Core
  • Sådan logges data til SQL Server i ASP.NET Core
  • Sådan planlægger du job med Quartz.NET i ASP.NET Core
  • Sådan returneres data fra ASP.NET Core Web API
  • Sådan formateres svardata i ASP.NET Core
  • Sådan forbruges en ASP.NET Core Web API ved hjælp af RestSharp
  • Sådan udføres asynkroniseringshandlinger ved hjælp af Dapper
  • Sådan bruges funktionsflag i ASP.NET Core
  • Sådan bruges attributten FromServices i ASP.NET Core
  • Sådan arbejder du med cookies i ASP.NET Core
  • Sådan arbejder du med statiske filer i ASP.NET Core
  • Sådan bruges URL-omskrivning af Middleware i ASP.NET Core
  • Sådan implementeres hastighedsbegrænsning i ASP.NET Core
  • Sådan bruges Azure Application Insights i ASP.NET Core
  • Brug af avancerede NLog-funktioner i ASP.NET Core
  • Sådan håndteres fejl i ASP.NET Web API
  • Sådan implementeres global undtagelseshåndtering i ASP.NET Core MVC
  • Sådan håndteres nulværdier i ASP.NET Core MVC
  • Avanceret versionering i ASP.NET Core Web API
  • Sådan arbejder du med arbejdertjenester i ASP.NET Core
  • Sådan bruges Data Protection API i ASP.NET Core
  • Sådan bruges betinget middleware i ASP.NET Core
  • Sådan arbejder du med sessionstilstand i ASP.NET Core
  • Sådan skriver du effektive controllere i ASP.NET Core