假设我们有以下类型:
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
)
答案 0 :(得分:0)
如果您返回HttpResponseMessage
或从中继承的类型(就像您的情况一样),在整个处理管道的其余部分,Web API将继续使用您在操作中创建的实例,它将不要自己创建新实例。
所以,在过滤器中你可以做到:
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
//will be FileResponseMessage
var responseRealType = actionExecutedContext.Response.GetType();
base.OnActionExecuted(actionExecutedContext);
}