Как да се справя с 404 грешки в ASP.NET Core MVC

ASP. Изненадващо, въпреки че ASP.NET Core предоставя много възможности за елегантна обработка на 404 грешки, изпълнението на ASP.NET Core MVC не се възползва от тях по подразбиране.

В резултат на това, когато уеб страница не бъде намерена и приложението върне грешка 404, ASP.NET Core MVC представя само обща страница за грешка в браузъра (както е показано на фигура 1 по-долу). Тази статия разглежда три опции в ASP.NET Core, които можем да използваме, за да обработваме по-изящно 404 грешки.

За да работите с примерите за кодове, предоставени в тази статия, трябва да имате Visual Studio 2019 инсталиран във вашата система. Ако все още нямате копие, можете да изтеглите Visual Studio 2019 тук.

Създайте ASP.NET Core MVC проект

Първо, нека създадем проект на ASP.NET Core в Visual Studio. Ако приемем, че Visual Studio 2019 е инсталиран във вашата система, следвайте стъпките, описани по-долу, за да създадете нов проект ASP.NET Core в Visual Studio.

  1. Стартирайте Visual Studio IDE.
  2. Кликнете върху „Създаване на нов проект“.
  3. В прозореца „Създаване на нов проект“ изберете „ASP.NET Core Web Application“ от показания списък с шаблони.
  4. Щракнете върху Напред. 
  5. В показания след това прозорец „Конфигуриране на вашия нов проект“ посочете името и местоположението на новия проект.
  6. Щракнете върху Създаване.
  7. В прозореца „Създаване на ново уеб приложение на ASP.NET Core“ изберете .NET Core като време на изпълнение и ASP.NET Core 3.1 (или по-нова версия) от падащия списък в горната част.
  8. Изберете „Уеб приложение (Model-View-Controller)“ като шаблон на проекта, за да създадете ново приложение на ASP.NET Core MVC.
  9. Уверете се, че квадратчетата „Активиране на поддръжката на Docker“ и „Конфигуриране за HTTPS“ са отметнати, тъй като тук няма да използваме тези функции.
  10. Уверете се, че удостоверяването е настроено на „Без удостоверяване“, тъй като и ние няма да използваме удостоверяване.
  11. Щракнете върху Създаване.

Следвайки тези стъпки ще създадете нов ASP.NET Core MVC проект в Visual Studio 2019. Ще използваме този проект, за да илюстрираме нашите опции за обработка на грешки 404 в следващите раздели на тази статия.

Когато изпълнявате проекта ASP.NET Core MVC, който създадохме в предишния раздел, ще видите началната страница на приложението заедно с приветственото съобщение, както е показано на Фигура 1 по-долу. 

Сега нека се опитаме да разгледаме уеб страница, която не съществува. За да направите това, напишете // localhost: 6440 / welcome в адресната лента на вашия браузър, докато приложението е в изпълнение. Когато механизмът на ASP.NET Core MVC не успее да намери ресурса за посочения URL адрес, ще се върне грешка 404 и ще ви бъде показана следната страница за грешка. Това не е много елегантно, нали?

Проверете Response.StatusCode в ASP.NET Core MVC

Има няколко начина, по които можете да подобрите тази страница с обща грешка. Простото решение е да проверите за HTTP код на състоянието 404 в отговора. Ако бъде намерен, можете да пренасочите контролата към съществуваща страница. Следният кодов фрагмент илюстрира как можете да напишете необходимия код в метода за конфигуриране на началния клас за пренасочване към началната страница, ако е възникнала грешка 404.

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

    {

        изчакайте следващия ();

        ако (context.Response.StatusCode == 404)

        {

            context.Request.Path = "/ Начало";

            изчакайте следващия ();

        }

    });

Сега, ако изпълните приложението и се опитате да прегледате URL // localhost: 6440 / добре дошли, ще бъдете пренасочени към началната страница на приложението.

Пълният код на метода за конфигуриране е даден по-долу за справка.

public void Configure (приложение IApplicationBuilder, IWebHostEnvironment env)

        {

            if (env.IsDevelopment ())

            {

                app.UseDeveloperExceptionPage ();

            }

            друго

            {

                app.UseExceptionHandler ("/ Начало / Грешка");

            }

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

            {

                изчакайте следващия ();

                ако (context.Response.StatusCode == 404)

                {

                    context.Request.Path = "/ Начало";

                    изчакайте следващия ();

                }

            });

            app.UseStaticFiles ();

            app.UseRouting ();

            app.UseAuthorization ();

            app.UseEndpoints (крайни точки =>

            {

                крайни точки.MapControllerRoute (

                    име: "по подразбиране",

                    образец: "{controller = Home} / {action = Index} / {id?}");

            });

        }

Използвайте междинния софтуер UseStatusCodePages в ASP.NET Core MVC

Второ решение за обработка на грешки 404 в ASP.NET Core е използването на вградения междинен софтуер UseStatusCodePages. Следният кодов фрагмент показва как можете да внедрите StatusCodePages в метода Configure на класа Startup.

public void Configure (приложение IApplicationBuilder, IWebHostEnvironment env)

        {

            app.UseStatusCodePages ();

            // Друг код

        }

Сега, когато изпълните приложението и прегледате несъществуващия ресурс, изходът ще бъде подобен на Фигура 3.

Използвайте UseStatusCodePagesWithReExecute междинния софтуер в ASP.NET Core MVC

Можете да се възползвате от междинния софтуер UseStatusCodePagesWithReExecute за обработка на неуспешни кодове на състоянието в случаите, когато процесът на генериране на отговора не е стартиран. Следователно този междинен софтуер няма да обработва грешки в кода на състоянието HTTP 404 - по-скоро, когато възникне грешка 404, контролата ще бъде предадена на друго действие на контролера за обработка на грешката.

Следният кодов фрагмент илюстрира как можете да използвате този междинен софтуер за пренасочване към друг метод за действие.

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

Ето как би изглеждал методът на действие.

[Route ("/ Home / HandleError / {code: int}")]

публична IActionResult HandleError (int код)

{

   ViewData ["ErrorMessage"] = $ "Възникна грешка. Кодът на грешката е: {код}";

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

}

Оставям на вас да създадете изглед HandleError за показване на съобщението за грешка.

И накрая, може да искате да създадете изгледи специално за код на грешка. Например можете да създадете изгледи като Home / Error / 500.cshtml или Home / Error / 404.cshtml. След това можете да проверите кода за грешка HTTP и да пренасочите към съответната страница за грешка.

Още един начин за обработка на грешките, които не са намерени, е чрез използване на персонализиран изглед и задаване на кода за грешка по подходящ начин. Когато възникне грешка във вашето приложение, можете да пренасочите потребителя към съответната страница за грешка и да покажете вашето потребителско съобщение за грешка, описващо грешката.

Как да направите повече в ASP.NET Core:

  • Как да използвам инжектиране на зависимост във филтри за действие в ASP.NET Core 3.1
  • Как да използвам шаблона за опции в ASP.NET Core
  • Как да използвам маршрутизиране на крайни точки в ASP.NET Core 3.0 MVC
  • Как да експортирам данни в Excel в ASP.NET Core 3.0
  • Как да използвам LoggerMessage в ASP.NET Core 3.0
  • Как да изпращате имейли в ASP.NET Core
  • Как да регистрирам данни в SQL Server в ASP.NET Core
  • Как да планирате работни места с помощта на Quartz.NET в ASP.NET Core
  • Как да върнете данни от ASP.NET Core Web API
  • Как да форматирате данните за отговор в ASP.NET Core
  • Как да консумирате ASP.NET Core Web API с помощта на RestSharp
  • Как да извършвате асинхронни операции с помощта на Dapper
  • Как да използваме флагове на функции в ASP.NET Core
  • Как да използвам атрибута FromServices в ASP.NET Core
  • Как да работите с бисквитки в ASP.NET Core
  • Как да работя със статични файлове в ASP.NET Core
  • Как да използвам URL пренаписване на Middleware в ASP.NET Core
  • Как да приложим ограничаване на скоростта в ASP.NET Core
  • Как да използвам Azure Application Insights в ASP.NET Core
  • Използване на разширени функции на NLog в ASP.NET Core
  • Как да се справим с грешки в ASP.NET Web API
  • Как да приложим обработка на глобални изключения в ASP.NET Core MVC
  • Как да се справя с нулеви стойности в ASP.NET Core MVC
  • Разширено създаване на версии в ASP.NET Core Web API
  • Как да работя с услуги за работници в ASP.NET Core
  • Как да използвам API за защита на данните в ASP.NET Core
  • Как да използвам условен мидълуер в ASP.NET Core
  • Как да работите със състоянието на сесията в ASP.NET Core
  • Как да пишете ефективни контролери в ASP.NET Core