在我的MVC4应用程序中,我有一个global {asax.cs覆盖Application_Error(object sender, EventArgs e)
,我可以提取exception
,statusCode
和requestedUrl
(用于处理404)。这将被发送到我的控制器,错误页面将是不同的404s与5xx(这些获得堆栈跟踪)。我没有看到如何使用UseErrorHandler()
将相同的信息添加到我的错误操作中。我在ASP.NET Core中使用正确的方法吗?
答案 0 :(得分:14)
<强> 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",
...
}
...
答案 1 :(得分:4)
在Beta8中,来自火星的agua&#39;答案有点不同。
而不是:
var feature = Context.GetFeature<IErrorHandlerFeature>();
使用:
var feature = HttpContext.Features.Get<IExceptionHandlerFeature>();
这还需要引用Microsoft.AspNet.Http.Features,以及Startup.cs中Configure()中的以下行:
app.UseExceptionHandler("/Home/Error");
答案 2 :(得分:1)
根据您配置的错误处理操作,您可以执行以下操作:
public IActionResult Error()
{
// 'Context' here is of type HttpContext
var feature = Context.GetFeature<IErrorHandlerFeature>();
if(feature != null)
{
var exception = feature.Error;
}
......
.......