Tom*_*han 3 asp.net httpcontext asp.net-web-api
我正在编写一个异常过滤器,将异常记录到 Elmah,所以我正在做这样的事情:
class ExceptionLoggingFilter : System.Web.Http.Filters.IExceptionFilter
{
public Task ExecuteExceptionFilterAsync(HttpActionExecutedContext actExecContext,
CancellationToken cancellationToken)
{
var httpContext = // what do I do here?
var errorSignal = ErrorSignal.FromContext(httpContext); // this is Elmah
errorSignal.Raise(actExecContext.Exception, httpContext);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道用什么来代替评论问题。我试图探索HttpActionExecutedContext从方法签名中获得的成员树,以找到通往 a 的方法System.Web.HttpContext,但我找不到任何到达那里的方法。
我如何在这里实现我的目标?
Elmah.ErrorSignal.FromCurrentContext()
Run Code Online (Sandbox Code Playgroud)
HttpContext.Current在引擎盖下使用,所以虽然这可能有效,但我确实找到了一个更好的(虽然更迂回)的方法来实现它:
var request = actionExecutedContext.Request;
object value;
if (request == null
|| !request.Properties.TryGetValue("MS_HttpContext", out value)
|| !(value is HttpContextBase))
return null; // Actually I'm returning a Maybe monad here but that's off topic...
}
var httpContextBase = value as HttpContextBase;
return httpContextBase.ApplicationInstance.Context;
Run Code Online (Sandbox Code Playgroud)
我将它与一个可能让我ErrorSignal.FromCurrentContext()用作后备的monad 实现一起使用,到目前为止它运行良好。
| 归档时间: |
|
| 查看次数: |
2268 次 |
| 最近记录: |