app.UseErrorHandler() 可以访问错误详细信息吗?

Can app.UseErrorHandler() access error details?

在我的 MVC4 应用程序中,我对 Application_Error(object sender, EventArgs e) 进行了 global.asax.cs 覆盖,我可以在其中提取 exceptionstatusCoderequestedUrl(用于处理 404 ).这将被发送到我的控制器,错误页面对于 404s 和 5xx 会有所不同(这些会得到堆栈跟踪)。我不知道如何使用 UseErrorHandler() 为我的错误操作获取相同的信息。我在 ASP.NET Core 中使用了正确的方法吗?

根据您配置的错误处理操作,您可以执行如下操作:

public IActionResult Error()
{
    // 'Context' here is of type HttpContext
    var feature = Context.GetFeature<IErrorHandlerFeature>();
    if(feature != null)
    {
        var exception = feature.Error;
    }
......
.......

八月2016 年 02 日 - 1.0.0 更新

Startup.cs

using Microsoft.AspNet.Builder;

namespace NS
{
    public class Startup
    {
         ...
         public virtual void Configure(IApplicationBuilder app)
         {
             ...
             app.UseExceptionHandler("/Home/Error");
             ...
         }
     }
}

HomeController.cs

using Microsoft.AspNet.Diagnostics;
using Microsoft.AspNet.Http.Features;
using Microsoft.AspNet.Mvc;
using Microsoft.Extensions.Logging;

namespace NS.Controllers
{
    public class HomeController : Controller
    {
        static ILogger _logger;
        public HomeController(ILoggerFactory factory)
        {
            if (_logger == null)
                _logger = factory.Create("Unhandled Error");
        }

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

project.json

...
"dependencies": {
    "Microsoft.AspNet.Diagnostics": "1.0.0",
     ...
}
...

在Beta8中,来自火星的agua的回答有点不同。

而不是:

var feature = Context.GetFeature<IErrorHandlerFeature>();

使用:

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

这还需要引用 Microsoft.AspNet.Http.Features,以及 Startup.cs 中 Configure() 中的以下行:

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