我發現它!
首先,我應該投actionExecutedContext.ActionContext.Response.Content
到ObjectContent
(你應該有一個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;