ASP.NET Web API异常过滤器 - 从HttpRequestBase获取请求URL的方法?

Lau*_*i I 0 .net asp.net asp.net-mvc exception asp.net-web-api

我已经为我的Web API实现了一个自定义异常过滤器.它按预期工作,除了一个小细节......

在以下代码示例中,SaveToErrorLog保存异常详细信息并尝试从context.Request.RawUrl获取请求URL.但context.Request不包含API在发生异常时尝试提供的URL.有没有办法在使用像这样的异常过滤器时获取URL?

public class APIExceptionFilter : ExceptionFilterAttribute
{
    private HttpContextBase context;

    public APIExceptionFilter() 
    {
        context = new HttpContextWrapper(HttpContext.Current);
    }

    public override void OnException(HttpActionExecutedContext actionContext)
    {
        actionContext.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError);       
        if (actionContext != null && context != null)
        {
            facade.SaveToErrorLog(actionContext.Exception, context.Request);
        }     

        throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
        {               
            Content = new StringContent(actionContext.Exception.Message),
            ReasonPhrase = "APIException"
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*nes 5

根据@emre_nevayeshirazi上面的评论,你需要使用HttpActionExecutedContext.这使您可以访问请求,然后访问所需的Uri.

public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
    var requestedUri = actionExecutedContext.Request.RequestUri;
   //Do something
}
Run Code Online (Sandbox Code Playgroud)