首页 > 解决方案 > 如何在特定的 Http 错误状态下重定向到视图而不是 UseDeveloperExceptionPage

问题描述

我有一个 .NET Core MVC 环境。当服务器出现 403 错误时,我想管理登录例程。

我目前在我的 Startup.cs 文件中使用此配置:

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

但我想要类似的东西:

if (env.IsDevelopment())
        {
            if ( error === 403 )
                app.UseExceptionHandler("/Home/MyCustomError");
            else
                app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error/500");
            app.UseHsts();
        }

我该如何处理?

在这两种情况下,我都试图用 app.UseExceptionHandler 来解释微软的解释。这样,我想做我想做的事,如果错误不是 403 则显示错误,如果是则返回登录视图。这个解决方案的问题是显示的错误不是一个很好的调试页面,比如 app.UseDeveloperExceptionPage 渲染。

标签: c#asp.net-coreasp.net-core-mvc

解决方案


您可以尝试使用UseStatusCodePagesWithReExecute。这是一个演示(我用 404 测试,您也可以在演示中将其他状态码错误页面添加到 Error 文件夹):

启动:

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

    app.UseStatusCodePagesWithReExecute("/StatusCode", "?code={0}");

状态码控制器:

public class StatusCodeController : Controller
    {
        public IActionResult Index(string code)
        {
            if (string.IsNullOrEmpty(code))
            {
                code = "Unknown.cshtml";
            }
            return View($"/Views/Shared/Error/{code}.cshtml");
        }
    }

错误文件夹:

在此处输入图像描述

404.cshtml:

<h1>404</h1>

结果: 在此处输入图像描述

你也可以试试UseStatusCodePagesWithRedirects


推荐阅读