在Web Api过滤器中获取准确的操作返回类型

时间:2014-09-09 04:36:52

标签: asp.net-web-api action-filter

假设我们有以下类型:

  public class FileResponseMessage : System.Net.Http.HttpResponseMessage
  {
  ...
  }

在我们的WebApi控制器中,我们像这样使用它:

    public HttpResponseMessage Temp()
    {
        return new File();
    }

现在我有一个类似以下的过滤器:

public class FileDowloadFilter:ActionFilterAttribute {

public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
    base.OnActionExecuted(actionExecutedContext);
}

}

在上面的OnActionExecuted方法中,我希望得到被调用动作的确切返回类型。有没有办法找到它? 请注意,actionExecutedContext.ActionContext.ActionDescriptor.ReturnType只返回操作的已定义的返回类型(在这种情况下,它返回HttpResponseMessage

1 个答案:

答案 0 :(得分:0)

如果您返回HttpResponseMessage或从中继承的类型(就像您的情况一样),在整个处理管道的其余部分,Web API将继续使用您在操作中创建的实例,它将不要自己创建新实例。

所以,在过滤器中你可以做到:

 public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
 {
     //will be FileResponseMessage
     var responseRealType = actionExecutedContext.Response.GetType(); 

     base.OnActionExecuted(actionExecutedContext);
 }