Programmering

Hvordan håndtere 404 feil i ASP.NET Core MVC

ASP.NET Core MVC er .NET Core-motstykket til ASP.NET MVC-rammeverket for å bygge tverrplattform, skalerbare, høytytende webapplikasjoner og API-er ved hjelp av Model-View-Controller designmønsteret. Overraskende, selv om ASP.NET Core gir mange muligheter for å håndtere 404 feil på en elegant måte, benytter ASP.NET Core MVC-kjøretiden seg ikke av dem som standard.

Som et resultat, når en webside ikke blir funnet og en 404-feil returneres av applikasjonen, presenterer ASP.NET Core MVC bare en generell nettleserfeilside (som vist i figur 1 nedenfor). Denne artikkelen diskuterer tre alternativer i ASP.NET Core vi kan bruke til å håndtere 404 feil mer elegant.

For å jobbe med kodeeksemplene som er gitt i denne artikkelen, bør du ha Visual Studio 2019 installert på systemet ditt. Hvis du ikke allerede har en kopi, kan du laste ned Visual Studio 2019 her.

Opprett et ASP.NET Core MVC-prosjekt

Først og fremst, la oss lage et ASP.NET Core-prosjekt i Visual Studio. Forutsatt at Visual Studio 2019 er installert i systemet ditt, følger du trinnene som er beskrevet nedenfor for å opprette et nytt ASP.NET Core-prosjekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klikk på "Opprett nytt prosjekt."
  3. I vinduet "Opprett nytt prosjekt" velger du "ASP.NET Core Web Application" fra listen over maler som vises.
  4. Klikk på Neste.
  5. I vinduet “Konfigurer ditt nye prosjekt” som vises, angir du navnet og stedet for det nye prosjektet.
  6. Klikk på Opprett.
  7. I vinduet "Opprett et nytt ASP.NET Core Web Application" velger du .NET Core som kjøretid og ASP.NET Core 3.1 (eller nyere) fra rullegardinlisten øverst.
  8. Velg "Web Application (Model-View-Controller)" som prosjektmal for å opprette et nytt ASP.NET Core MVC-program.
  9. Forsikre deg om at avmerkingsboksene "Aktiver Docker-støtte" og "Konfigurer for HTTPS" ikke er merket av da vi ikke bruker disse funksjonene her.
  10. Forsikre deg om at autentisering er satt til "ingen godkjenning", da vi heller ikke bruker autentisering.
  11. Klikk på Opprett.

Ved å følge disse trinnene vil det opprette et nytt ASP.NET Core MVC-prosjekt i Visual Studio 2019. Vi bruker dette prosjektet til å illustrere våre 404 feilhåndteringsalternativer i de påfølgende delene av denne artikkelen.

Når du kjører ASP.NET Core MVC-prosjektet vi har opprettet i forrige avsnitt, vil du se hjemmesiden til applikasjonen sammen med velkomstmeldingen som vist i figur 1 nedenfor.

La oss nå prøve å bla gjennom en webside som ikke eksisterer. For å gjøre dette, skriv // localhost: 6440 / welcome i adressefeltet i nettleseren din mens applikasjonen er i utførelse. Når ASP.NET Core MVC-motoren ikke finner ressursen for den angitte URL-en, vil en 404-feil bli returnert, og du vil bli presentert for den følgende feilsiden. Det er vel ikke så elegant?

Kontroller Response.StatusCode i ASP.NET Core MVC

Det er flere måter du kan forbedre på denne generiske feilsiden. En enkel løsning er å se etter HTTP-statuskoden 404 i svaret. Hvis funnet, kan du omdirigere kontrollen til en eksisterende side. Følgende kodebit illustrerer hvordan du kan skrive den nødvendige koden i Konfigurer-metoden i oppstartsklassen for å omdirigere til hjemmesiden hvis en 404-feil har oppstått.

 app.Use (async (kontekst, neste) =>

    {

avvente neste ();

if (context.Response.StatusCode == 404)

        {

context.Request.Path = "/ Hjem";

avvente neste ();

        }

    });

Nå hvis du kjører applikasjonen og prøver å bla gjennom URL // localhost: 6440 / velkomst, blir du omdirigert til hjemmesiden til applikasjonen.

Den komplette koden til konfigurasjonsmetoden er gitt nedenfor for din referanse.

public void Configure (IApplicationBuilder app, IWebHostEnvironment env)

        {

if (env.IsDevelopment ())

            {

app.UseDeveloperExceptionPage ();

            }

ellers

            {

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

            }

app.Use (async (kontekst, neste) =>

            {

avvente neste ();

if (context.Response.StatusCode == 404)

                {

context.Request.Path = "/ Hjem";

avvente neste ();

                }

            });

app.UseStaticFiles ();

app.UseRouting ();

app.UseAuthorization ();

app.UseEndpoints (endpoints =>

            {

endpoints.MapControllerRoute (

navn: "standard",

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

            });

        }

Bruk UseStatusCodePages mellomvare i ASP.NET Core MVC

En annen løsning for å håndtere 404 feil i ASP.NET Core er å bruke den innebygde MiddleStatusCodePages mellomvaren. Følgende kodebit viser hvordan du kan implementere StatusCodePages i konfigurasjonsmetoden i oppstartklassen.

public void Configure (IApplicationBuilder app, IWebHostEnvironment env)

        {

app.UseStatusCodePages ();

// Annen kode

        }

Nå når du kjører applikasjonen og blar til den ikke-eksisterende ressursen, vil utdataene være lik Figur 3.

Bruk UseStatusCodePagesWithReExecute mellomvare i ASP.NET Core MVC

Du kan dra nytte av UseStatusCodePagesWithReExecute mellomvare for å håndtere statuskoder som ikke lykkes i tilfeller der prosessen med å generere svaret ikke er startet. Derfor vil denne mellomvaren ikke håndtere HTTP 404-statuskodefeil, men når en 404-feil oppstår, vil kontrollen bli sendt til en annen kontrollerhandling for å håndtere feilen.

Følgende kodebit illustrerer hvordan du kan bruke denne mellomvaren til å omdirigere til en annen handlingsmetode.

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

Slik ser handlingsmetoden ut.

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

offentlig IActionResult HandleError (int-kode)

{

ViewData ["ErrorMessage"] = $ "Feil oppstod. Feilkoden er: {code}";

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

}

Jeg overlater til deg å lage HandleError-visningen for å vise feilmeldingen.

Til slutt vil du kanskje lage visninger spesielt for en feilkode. For eksempel kan du opprette visninger som Hjem / Feil / 500.cshtml eller Hjem / Feil / 404.cshtml. Deretter kan du sjekke HTTP-feilkoden og omdirigere til riktig feilside.

Enda en annen måte å håndtere feil som ikke er funnet på, er å bruke en tilpasset visning og sette feilkoden på riktig måte. Når det oppstår en feil i applikasjonen din, kan du omdirigere brukeren til riktig feilside og vise den tilpassede feilmeldingen som beskriver feilen.

Hvordan gjøre mer i ASP.NET Core:

  • Hvordan bruke avhengighetsinjeksjon i handlingsfiltre i ASP.NET Core 3.1
  • Hvordan bruke alternativmønsteret i ASP.NET Core
  • Hvordan bruke endepunktsruting i ASP.NET Core 3.0 MVC
  • Slik eksporterer du data til Excel i ASP.NET Core 3.0
  • Hvordan bruke LoggerMessage i ASP.NET Core 3.0
  • Hvordan sende e-post i ASP.NET Core
  • Hvordan logge data til SQL Server i ASP.NET Core
  • Hvordan planlegge jobber med Quartz.NET i ASP.NET Core
  • Hvordan returnere data fra ASP.NET Core Web API
  • Hvordan formatere svardata i ASP.NET Core
  • Slik bruker du et ASP.NET Core Web API ved hjelp av RestSharp
  • Hvordan utføre asynkroniseringsoperasjoner ved hjelp av Dapper
  • Hvordan bruke funksjonsflagg i ASP.NET Core
  • Hvordan bruke attributtet FromServices i ASP.NET Core
  • Hvordan jobbe med informasjonskapsler i ASP.NET Core
  • Hvordan jobbe med statiske filer i ASP.NET Core
  • Hvordan bruke URL Rewriting Middleware i ASP.NET Core
  • Hvordan implementere hastighetsbegrensning i ASP.NET Core
  • Hvordan bruke Azure Application Insights i ASP.NET Core
  • Bruker avanserte NLog-funksjoner i ASP.NET Core
  • Hvordan håndtere feil i ASP.NET Web API
  • Hvordan implementere global unntaksbehandling i ASP.NET Core MVC
  • Hvordan håndtere nullverdier i ASP.NET Core MVC
  • Avansert versjonering i ASP.NET Core Web API
  • Hvordan jobbe med arbeidstjenester i ASP.NET Core
  • Hvordan bruke API for databeskyttelse i ASP.NET Core
  • Hvordan bruke betinget mellomvare i ASP.NET Core
  • Hvordan jobbe med økttilstand i ASP.NET Core
  • Hvordan skrive effektive kontrollere i ASP.NET Core
$config[zx-auto] not found$config[zx-overlay] not found