c# - .NET Core 从 Startup.cs 重定向到自定义错误页面

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

我创建了错误 400 和 404 页面,并希望将其用于我的应用程序。我已在 Startup.cs 中声明了这一点:

app.UseStatusCodePages(async context => {
    if(context.HttpContext.Response.StatusCode == 400)
    {
        context.HttpContext.Response.Redirect("~/Views/Shared/Errors/AccessDenied.cshtml");
    }
});
app.UseStatusCodePages(async context => {
    if (context.HttpContext.Response.StatusCode == 404)
    {
        context.HttpContext.Response.Redirect("~/Views/Shared/Errors/NotFound.cshtml");
    }
});

这是正确的吗?当我测试它时,我仍然被重定向回标准 .net core 错误页面。我是否遗漏了其他内容?

最佳答案

首先,您可以使用 if .. else 结构将两者结合起来,例如

app.UseStatusCodePages(async context => {
    if(context.HttpContext.Response.StatusCode == 400)
    {
        context.HttpContext.Response.Redirect("~/Views/Shared/Errors/AccessDenied.cshtml");
    }
    else if (context.HttpContext.Response.StatusCode == 404)
    {
        context.HttpContext.Response.Redirect("~/Views/Shared/Errors/NotFound.cshtml");
    }
});

其次,请确保在请求处理中间件(例如静态文件中间件和 MVC 中间件)之前调用 UseStatusCodePages 中间件。

我建议您使用 UseStatusCodePagesWithRedirect (或者) UseStatusCodePagesWithReExecute 而不是显式重定向

关于c# - .NET Core 从 Startup.cs 重定向到自定义错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56733779/

相关文章:

c# - GridView 中的 CheckBoxField 不会绑定(bind)到数据库中的字符串字段

asp.net - 文本区域(asp :Textbox TextMode ="Multiline") overlapping buttons

asp.net - 无法计算表达式,因为代码已优化或 native 框架位于调用堆栈顶部

c# - 轻松使用角色提供者的 ASP.NET 身份

javascript - 从 Kendo Grid 中获取所选记录的警报 ID

c# - 用 div 值填充 @Html.Hidden

c# - 用于公开从 xml 读取的数据的单例与静态类

javascript - 在 Dynamics CRM 中手动编辑站点地图

c# - 用 NSubstitute 模拟泛型方法

asp.net - 在 IIS7 (applicationHost.config) 上运行 ASP.NET 1.1 时出错