【发布时间】:2020-02-08 06:05:20
【问题描述】:
我正在将 Web api 从 .Net 迁移到 .NetCore。
我们有一个自定义的 ExceptionFilterAttribute 来集中处理错误。像这样的:
public class HandleCustomErrorAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext filterContext)
{
// Error handling routine
}
}
通过一些搜索,我设法在 .Net Core 上创建了类似的东西
public static class ExceptionMiddlewareExtensions
{
public static void ConfigureExceptionHandler(this IApplicationBuilder app)
{
app.UseExceptionHandler(appError =>
{
appError.Run(async context =>
{
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
context.Response.ContentType = "application/json";
var contextFeature = context.Features.Get<IExceptionHandlerFeature>();
if (contextFeature != null)
{
//logger.LogError($"Something went wrong: {contextFeature.Error}");
await context.Response.WriteAsync(new ErrorDetails()
{
StatusCode = context.Response.StatusCode,
Message = "Internal Server Error."
}.ToString());
}
});
});
}
}
我需要找到一种方法来访问 .Net Core 版本中的 .Net 中可用的这 3 个信息:
filterContext.ActionContext.ActionDescriptor.ActionName;
filterContext.ActionContext.ControllerContext.ControllerDescriptor.ControllerName;
HttpContext.Current.Request.Url.ToString();
有可能吗?
【问题讨论】:
-
您需要添加一个
ExceptionFilterAttribute。看看这个答案stackoverflow.com/a/58119145/3667938
标签: asp.net-core error-handling asp.net-core-webapi