app.UseErrorHandler() 可以访问错误详细信息吗?
Can app.UseErrorHandler() access error details?
在我的 MVC4 应用程序中,我对 Application_Error(object sender, EventArgs e)
进行了 global.asax.cs 覆盖,我可以在其中提取 exception
、statusCode
和 requestedUrl
(用于处理 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");
在我的 MVC4 应用程序中,我对 Application_Error(object sender, EventArgs e)
进行了 global.asax.cs 覆盖,我可以在其中提取 exception
、statusCode
和 requestedUrl
(用于处理 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");