代码之家  ›  专栏  ›  技术社区  ›  Muflix

控制器中的错误处理

  •  0
  • Muflix  · 技术社区  · 6 年前

    我有两个控制器动作

    #1将引发除以零异常

    public IActionResult About()
    {
         ViewData["Message"] = "Your application description page.";
         var x = 0;
         var y = 5 / x;
         return View();
    }
    

    #2异常发生后,我希望在生产模式下调用此操作。

    public IActionResult Error()
    {
        var model = new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier };
        return View(model);
    }
    

    我有两个问题

    1. 当我处于VS调试模式时,将使用app.usedeveloperExceptionPage(),因此不会调用错误控制器(这对开发环境很好)。
    2. 当我处于vs生产模式时,会使用visually app.usedeveloperexceptionpage(),但我不知道如何确认实际使用的环境(startup.cs中的断点在生产模式下不起作用)。
    3. 如果以某种方式调用了错误操作,如何获取完整的异常消息(用于日志目的)?默认情况下,只有requestid存储在模型中。

    我不想在每个action或repeat action filter属性中使用try-catch语法,因为我想像以前在 global.asax 在核心版本之前。

    我的startup.cs很简单。

    // 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.UseBrowserLink();
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }
    
        app.UseStaticFiles();
        app.UseStatusCodePages();
    
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
    

    知道吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Pooja Suryawanshi    6 年前

    我们可以使用下面的代码行

     var feature = HttpContext.Features.Get<IExceptionHandlerFeature>();
               var error = feature?.Error;
                _logger.LogError("Oops!", error);
                return View("~/Views/Shared/Error.cshtml", error);
    

    你能参考下面的链接了解更多细节吗 Click

        2
  •  1
  •   Chris Pratt    6 年前

    要获取异常详细信息,您只需要:

    var ex = HttpContext.Features.Get<IExceptionHandlerFeature>();