gpt4 book ai didi

asp.net-mvc - 修改WebApi的ActionFilterAttribute的OnActionExecuted方法中的HttpContent(actionExecutedContext.Response.Content)

转载 作者:行者123 更新时间:2023-12-01 23:19:25 25 4
gpt4 key购买 nike

我的 WebApi 操作方法返回一个 IQueryable,我想通过 Asp.Net WebApi(不是 MVC)中的 ActionFilterAttribute 修改它(应用分页和过滤)。以下线程我了解了如何访问传递的模型:

.Net Web API IActionFilter.OnActionExecuted return type

但是我怎样才能用其他东西改变/替换整个模型呢?

最佳答案

我找到了!

首先,我应该将 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;

关于asp.net-mvc - 修改WebApi的ActionFilterAttribute的OnActionExecuted方法中的HttpContent(actionExecutedContext.Response.Content),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16688248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com