自定义错误页面 .Net Core Web 应用程序未显示 500 错误

2024-01-09

我在生产中创建了一个自定义错误页面,它将要求用户更正 HTTP 状态代码页面,而不是显示丑陋的开发人员错误页面。

我现在的代码如下:

启动.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();

错误控制器:

 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]

**编辑 在.net core中,如果有中间件处理异常处理,我是否需要使用try catch


尝试添加app.UseExceptionHandler("/Error/500");除了如下所示的状态代码行。当应用程序中发生异常时,会抛出 500 错误,并且其处理方式与其他状态代码页不同。在asp.net核心中文档 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/error-handling?view=aspnetcore-3.1,首先展示如何处理异常,然后展示如何处理状态代码页。

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Error/500");   
    app.UseStatusCodePagesWithRedirects("/Error/{0}");
    app.UseHsts();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义错误页面 .Net Core Web 应用程序未显示 500 错误 的相关文章

随机推荐