2013-05-22 76 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; 
相關問題