Anpassade http-felmeddelanden i ASP.NET Core

I det här inlägget beskrivs hur man svarar med användarvänliga meddelanden när http-fel inträffar på din hemsida i ASP.NET Core. Anpassade http-felmeddelanden avslöjar inte någon information om din kod eller din konfiguration och anpassade felmeddelanden ser trevligare ut.

Http-fel kan vara klientfel med statuskoder från 400 till och med 499 eller serverfel med statuskoder mellan 500 och 599. Det vanligaste klientfelet är 404 ”Not Found” och det här felet uppstår när en användare försöker nå en sida som inte existerar.

Det är viktigt att svara med rätt statuskod även om din webbplats visar ett anpassat felmeddelande. En statuskod på 404 berättar för sökmotorer att sidan inte existerar och att de inte ska indexera den här sidan. Om din anpassade felsida svarar med en statuskod på 200 för en sida som inte existerar så riskerar du att få många dubbletter indexerade av sökmotorer.

Du kan inspektera svar och statuskoder under fliken Nätverk när du använder verktyg för programmerare i Google Chrome. Verktyg för utvecklare i Google Chrome är mycket användbara när du vill felsöka http-statuskoder.

Tjänster

Vi måste först registrera vår felhantering i metoden Configure i klassen StartUp. Vi kommer att svara med en anpassad felsida i miljöer som inte är utveckling, felinformationen under utveckling kommer att vara betydligt mer detaljerad. Parametern {0} som ligger i den relativa url:en (/home/error/{0}) innehåller statuskoden.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // Use error handling
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseStatusCodePagesWithReExecute("/home/error/{0}");
    }

    // More code ...

} // End of the Configure method

Controller

Vi måste lägga till en error-metod i vår home-controller för att hantera förfrågningar när http-fel uppstår på vår hemsida. Vi har skapat 3 olika statiska sidor för att hantera anpassade felmeddelanden, statiska sidor hanteras av en klass som implementerar IStaticPageRepository. Standardfelsidan visar statuskoden 500 ”Internt serverfel”.

public class homeController : Controller
{
    #region Variables

    private readonly IStaticPageRepository static_page_repository;
    private readonly IGroupRepository group_repository;
    private readonly IFinalRepository final_repository;

    #endregion

    #region Constructors

    public homeController(IStaticPageRepository static_page_repository, IGroupRepository group_repository, IFinalRepository final_repository)
    {
        // Set values for instance variables
        this.static_page_repository = static_page_repository;
        this.group_repository = group_repository;
        this.final_repository = final_repository;

    } // End of the constructor

    #endregion

    #region View methods

    // Get the error page
    // GET: /home/error/404
    [HttpGet]
    public IActionResult error(string id = "")
    {
        // Set the connection id
        byte connectionId = 2;
        if (id == "404")
        {
            connectionId = 3;
        }
        else if(id == "401")
        {
            connectionId = 4;
        }
        else
        {
            connectionId = 2;
        }
               
        // Get the error page
        StaticPage staticPage = this.static_page_repository.GetOneByConnectionId(connectionId);
        staticPage = staticPage != null ? staticPage : new StaticPage();

        // Create the bread crumb list
        List<BreadCrumb> breadCrumbs = new List<BreadCrumb>(2);
        breadCrumbs.Add(new BreadCrumb("Startsidan", "/"));
        breadCrumbs.Add(new BreadCrumb(staticPage.link_name, "/home/error/" + id.ToString()));

        // Set form values
        ViewBag.BreadCrumbs = breadCrumbs;
        ViewBag.StaticPage = staticPage;

        // Return the view
        return View();

    } // End of the error method

    #endregion

} // End of the class

Vy

Vår felmetod i vår hemkontroller returnerar en vy som heter error.cshtml som svar på http-fel. Vår felvy använder en layoutvy och visar en titel och en beskrivning.

@using Annytab.Models
@{
    // Get form values
    StaticPage staticPage = ViewBag.StaticPage;

    // Set meta data
    ViewBag.Title = staticPage.title;
    ViewBag.MetaTitle = staticPage.title;
    ViewBag.MetaDescription = staticPage.meta_description;
    ViewBag.MetaKeywords = staticPage.meta_keywords;
    ViewBag.MetaCanonical = "http://www.mysite.nu/home/error";
    ViewBag.MetaRobots = staticPage.meta_robots;

    // Set the layout for the page
    Layout = "/Views/shared_front/_standard_layout.cshtml";
}

@*Title*@
<h1>@ViewBag.Title</h1>

@*Description*@
<div class="annytab-basic-bread-text">@Html.Raw(staticPage.main_content)</div>

<div class="annytab-basic-space"></div>

@section scripts {
    <script>$("#txtSearch").focus();</script>
}

Lämna ett svar

E-postadressen publiceras inte. Obligatoriska fält är märkta *