Страница пользовательских ошибок. Net Базовое веб-приложение не показывает ошибку 500 - PullRequest
1 голос
/ 13 марта 2020

Я создал пользовательскую страницу ошибок, когда в процессе работы пользователю потребуется исправить кодовую страницу статуса HTTP, а не показывать ужасную страницу ошибок разработчиков.

Мой код на данный момент выглядит следующим образом:

Startup.cs

 public void Configure(IApplicationBuilder app, IHostEnvironment env, UserManager<SiteUser> user)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseStatusCodePagesWithRedirects("/Error/{0}");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseSession();
        app.UseRouting();
        app.UseAuthentication();
        app.UseAuthorization();

ErrorController:

 public class ErrorController : Controller
{
    [Route("Error/{statusCode}")]
    public IActionResult HttpStatusCodeHandler(int statusCode)
    {
        switch (statusCode)
        {
            case 404:
                ViewBag.ErrorMessage = "Uh oh, this page could not be found";
                ViewBag.ErrorNumber = "404";
                break;
            case 405:
                ViewBag.ErrorMessage = "Method not allowed. Contact administrator";
                ViewBag.ErrorNumber = "405";
                break;
            case 401:
                ViewBag.ErrorMessage = "You do not have acccess to this page. Please make sure you are logged in, or contact your administrator.";
                ViewBag.ErrorNumber = "401";
                break;
            case 500:
                ViewBag.ErrorMessage = "Internal Server Error. Please contact administrator.";
                ViewBag.ErrorNumber = "500";
                break;
            case 403:
                ViewBag.ErrorMessage = "Forbidden. Please contact administrator.";
                ViewBag.ErrorNumber = "403";
                break;
            case 503:
                ViewBag.ErrorMessage = "Service unavailable. Please contact administrator";
                ViewBag.ErrorNumber = "503";
                break;
            case 504:
                ViewBag.ErrorMessage = "Gateway Timeout. Please contact administrator";
                ViewBag.ErrorNumber = "504";
                break;
            case 001:
                ViewBag.ErrorMessage = "This link has expired.";
                ViewBag.ErrorNumber = "Oh no!";
                break;

        }
        return View("NotFound");
    }

Моя проблема в том, что всякий раз, когда веб-приложение выдает ошибку 500, оно не приводит пользователя на эту страницу, а вместо этого на эту [! [Страницу с неправильной ошибкой] [1]] [1] страницу ...

Не уверен, что происходит не так, потому что, когда я пытаюсь получить доступ к несуществующей странице, пользователь выводит на нужную страницу:

[! [Введите описание изображения здесь] [2]] [2]

** EDIT In. net core Мне нужно использовать try catch, если есть промежуточное ПО, которое обрабатывает обработку исключений

1 Ответ

0 голосов
/ 13 марта 2020

Попробуйте добавить app.UseExceptionHandler("/Error/500"); в дополнение к строке кода состояния, как показано ниже. При возникновении исключения в приложении возникает 500 ошибок, которые обрабатываются не так, как другие кодовые страницы состояния. В документации asp. net core сначала показано, как обрабатывать исключения, а затем показано, как обрабатывать кодовые страницы состояния.

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Error/500");   
    app.UseStatusCodePagesWithRedirects("/Error/{0}");
    app.UseHsts();
}
...