2013-05-22 34 views

回答

11

我发现它!

首先,我应该投actionExecutedContext.ActionContext.Response.ContentObjectContent(你应该有一个refrence到项目System.Net.Http.Formatting.dll文件)

那么以后,就可以做到以下几点:

public override void OnActionExecuted(System.Web.Http.Filters.HttpActionExecutedContext actionExecutedContext) 
{ 
    IEnumerable model = null; 
    actionExecutedContext.Response.TryGetContentValue(out model); 
    if (model != null) 
    { 
     IQueryable modelQuery = model.AsQueryable(); 

     //Do your modelQuery modification/replacement 

     (actionExecutedContext.ActionContext.Response.Content as ObjectContent).Value = modelQuery; 
    } 

    base.OnActionExecuted(actionExecutedContext); 
} 

注:使用TryGetContentValue方法你需要导入using System.Net.Http;命名空间,尽管在上面的代码中调用这个methoud并不重要。

::更新::

如果您需要更改内容的值类型(例如返回一个字符串,而不是IQueryable的),你不能简单地改变值。您应该创建一个像这样的新内容:

var result = "Something new!"; 
var oldObjectContent = (actionExecutedContext.ActionContext.Response.Content as ObjectContent); 
var newContent = new ObjectContent<string>(result, oldObjectContent.Formatter); 
actionExecutedContext.ActionContext.Response.Content = newContent; 
相关问题