【问题标题】:How do I redirect to a View instead of UseDeveloperExceptionPage on Specific Http Error Status如何在特定的 Http 错误状态下重定向到视图而不是 UseDeveloperExceptionPage
【发布时间】:2021-07-12 14:27:15
【问题描述】:

我有一个 .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 渲染。

【问题讨论】:

  • 您是在使用 ASP.NET MVC(对于完整、经典的 .NET 框架 - 最高 v4.8) - 还是在使用 ASP.NET Core MVC跨平台的 .NET Core 框架?您的标签、标题和问题对此不太清楚和一致
  • @marc_s 我正在开发 .net Core MVC,我修复了标签和问题

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


【解决方案1】:

你可以尝试使用UseStatusCodePagesWithReExecute。这是一个demo(我用404测试,你也可以在demo的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

【讨论】:

    【解决方案2】:

    试试这个

    if (env.IsDevelopment())
    {
        app.Use(async (context, next) =>
        {
            await next();
    
            if (context.Response.StatusCode == 403 && !context.Response.HasStarted)
            {
                context.Response.Redirect("/Home/MyCustomError");
            }
        });
        
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error/500");
        app.UseHsts();
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-25
      • 2016-11-03
      • 2018-04-23
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 2020-08-23
      相关资源
      最近更新 更多