如何处理ASP.NET Core MVC中的404错误

ASP.NET Core MVC是ASP.NET MVC框架的.NET Core对应版本,用于使用“模型-视图-控制器”设计模式构建跨平台,可伸缩的高性能Web应用程序和API。 令人惊讶的是,尽管ASP.NET Core提供了许多选项来优雅地处理404错误,但ASP.NET Core MVC运行时默认情况下并未利用它们。

结果,当找不到网页并由应用程序返回404错误时,ASP.NET Core MVC仅显示通用的浏览器错误页面(如下图1所示)。 本文讨论了ASP.NET Core中的三个选项,我们可以使用它们更好地处理404错误。

[ 同样在InfoWorld上:隔离期间最好的免费编程课程 ]

若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019

创建一个ASP.NET Core MVC项目

首先,让我们在Visual Studio中创建一个ASP.NET Core项目。 假设系统中已安装Visual Studio 2019,请按照以下概述的步骤在Visual Studio中创建一个新的ASP.NET Core项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web应用程序”。
  4. 点击下一步。
  5. 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
  6. 单击创建。
  7. 在“创建新的ASP.NET Core Web应用程序”窗口中,从顶部的下拉列表中选择.NET Core作为运行时,并选择ASP.NET Core 3.1(或更高版本)。
  8. 选择“ Web应用程序(Model-View-Controller)”作为项目模板,以创建新的ASP.NET Core MVC应用程序。
  9. 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不使用这些功能。
  10. 确保将身份验证设置为“无身份验证”,因为我们也不会使用身份验证。
  11. 单击创建。

完成这些步骤后,将在Visual Studio 2019中创建一个新的ASP.NET Core MVC项目。在本文的后续部分中,我们将使用该项目来说明404错误处理选项。

当执行上一节中创建的ASP.NET Core MVC项目时,您将看到应用程序的首页以及欢迎消息,如下图1所示。

ASPNET Core MVC 404错误01 IDG

图1:ASP.NET Core MVC中的默认主页。

现在,让我们尝试浏览一个不存在的网页。 为此,请在执行应用程序时在浏览器的地址栏中键入http:// localhost:6440 / welcome。 当ASP.NET Core MVC引擎无法找到指定URL的资源时,将返回404错误,并且将显示以下错误页面。 那不是很优雅,是吗?

ASPNET Core MVC 404错误02 IDG

图2:ASP.NET Core MVC针对不存在的网页显示的默认404错误页面。

检查ASP.NET Core MVC中的Response.StatusCode

您可以通过多种方法来改进此通用错误页面。 一个简单的解决方案是在响应中检查HTTP状态代码404。 如果找到,则可以将控件重定向到存在的页面。 以下代码段说明了如果发生404错误,如何在Startup类的Configure方法中编写必要的代码以重定向到主页。

app.Use(async (context, next) =>
    {
        await next();
        if (context.Response.StatusCode == 404)
        {
            context.Request.Path = "/Home";
            await next();
        }
    });

现在,如果您执行该应用程序并尝试浏览URL http:// localhost:6440 / welcome,您将被重定向到该应用程序的主页。

下面提供了Configure方法的完整代码,供您参考。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
            app.Use(async (context, next) =>
            {
                await next();
                if (context.Response.StatusCode == 404)
                {
                    context.Request.Path = "/Home";
                    await next();
                }
            });
            app.UseStaticFiles();
            app.UseRouting();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }

在ASP.NET Core MVC中使用UseStatusCodePages中间件

处理ASP.NET Core中404错误的第二种解决方案是使用内置的UseStatusCodePages中间件。 下面的代码片段显示了如何在Startup类的Configure方法中实现StatusCodePages。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseStatusCodePages();
            //Other code
        }

现在,当您执行该应用程序并浏览到不存在的资源时,输出将类似于图3。

aspnet core mvc 404错误03 IDG

图3:运行中的ASP.NET Core StatusCodePages中间件。

在ASP.NET Core MVC中使用UseStatusCodePagesWithReExecute中间件

如果尚未启动生成响应的过程,则可以利用UseStatusCodePagesWithReExecute中间件来处理非成功状态代码。 因此,该中间件将不会处理HTTP 404状态代码错误-而是在发生404错误时,控件将传递给另一个控制器操作以处理该错误。

以下代码段说明了如何使用此中间件重定向到另一个操作方法。

app.UseStatusCodePagesWithReExecute("/Home/HandleError/{0}");

这是操作方法的外观。

[Route("/Home/HandleError/{code:int}")]
public IActionResult HandleError(int code)
{
   ViewData["ErrorMessage"] = $"Error occurred. The ErrorCode is: {code}";
   return View("~/Views/Shared/HandleError.cshtml");
}

我留给您创建HandleError视图以显示错误消息。

最后,您可能要专门为错误代码创建视图。 例如,您可以创建诸如Home / Error / 500.cshtml或Home / Error / 404.cshtml之类的视图。 然后,您可以检查HTTP错误代码并重定向到适当的错误页面。

处理页面未找到错误的另一种方法是使用自定义视图并适当设置错误代码。 当您的应用程序中发生错误时,您可以将用户重定向到适当的错误页面,并显示描述该错误的自定义错误消息。

如何在ASP.NET Core中执行更多操作:

翻译自: https://www.infoworld.com/article/3545304/how-to-handle-404-errors-in-aspnet-core-mvc.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值