• ASP.NET Core中app.UseDeveloperExceptionPage和app.UseExceptionHandler方法有什么用


    在新建一个ASP.NET Core项目后,在项目Startup类的Configure方法中默认会添加两个方法的调用,app.UseDeveloperExceptionPage和app.UseExceptionHandler,如下所示:

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }
                
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

    其实app.UseDeveloperExceptionPage方法就是在告诉ASP.NET Core,当代码发生异常错误后,在浏览器上显示异常错误信息页,也就是我们在开发代码时,经常看到的异常错误信息页:

    该异常错误信息页返回的HTTP状态码为500

    但是我们可以看到app.UseDeveloperExceptionPage方法,是写在if (env.IsDevelopment())这个条件里面的,所以当只有在开发环境下,ASP.NET Core才会显示上面的异常错误信息页,而在其它环境下(例如ASP.NET Core项目发布后所处的生产环境),会执行app.UseExceptionHandler方法,该方法会传递一个URL地址,本例中我们传递的就是"/Home/Error":

    app.UseExceptionHandler("/Home/Error");

    也就是说在非开发环境下,ASP.NET Core项目中有代码发生异常后,ASP.NET Core会将"/Home/Error"这个URL地址的页面内容呈现到客户端浏览器上,而"/Home/Error"是一个自定义的MVC视图页面,你可以定义任何想显示的内容,在这里我们只显示一个错误提示"后台代码发生错误!",以下是视图文件"Error.cshtml"的内容:

    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Error</title>
    </head>
    <body>
        <h1>后台代码发生错误!</h1>
    </body>
    </html>

    注意当使用app.UseExceptionHandler方法,将用户HTTP请求转向"/Home/Error"这个URL地址后,在HomeController的Error方法中,HTTP请求的默认状态就已经变为500了:

    当然这里,我们也可以在HomeController的Error方法中,通过Response.StatusCode属性将其改为其它状态码。

    最终呈现在客户端浏览器上的页面,就是我们在前面定义的视图文件"Error.cshtml":

    所以app.UseDeveloperExceptionPage和app.UseExceptionHandler两个方法,都是用来定义ASP.NET Core项目有代码发生异常后,给客户端浏览器显示什么页面的,只不过app.UseDeveloperExceptionPage方法用于开发环境,ASP.NET Core会自动生成一个异常显示页面,而app.UseExceptionHandler方法用于非开发环境,并且需要我们自己定义异常显示页面。

  • 相关阅读:
    transient关键字
    java 序列化,反序列化工具
    switch case语法
    java空map定义
    斐波那契数列的实现算法
    正则表达式
    java业务逻辑代码中需要增加一些与主流业务无关操作
    阿里巴巴开发手册对manager层的定义
    july 19
    bulletproof monk quote
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/11459985.html
Copyright © 2020-2023  润新知