【问题标题】:Modify HttpContent (actionExecutedContext.Response.Content) in OnActionExecuted method of WebApi's ActionFilterAttribute修改WebApi的ActionFilterAttribute的OnActionExecuted方法中的HttpContent(actionExecutedContext.Response.Content)
【发布时间】:2013-05-17 07:07:53
【问题描述】:
【问题讨论】:
标签:
asp.net-mvc
asp.net-web-api
【解决方案1】:
我找到了!
首先我应该将actionExecutedContext.ActionContext.Response.Content 转换为ObjectContent(您应该在项目中引用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;命名空间,虽然在上面的代码中调用这个方法并不重要。
:: 更新 ::
如果您需要更改内容的值类型(例如返回字符串而不是 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;