加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在WebApi的ActionFilterAttribute的OnActionExec

发布时间:2020-12-16 03:30:58 所属栏目:asp.Net 来源:网络整理
导读:我的WebApi操作方法返回IQueryable,我想通过Asp.Net WebApi(非MVC)中的ActionFilterAttribute修改它(应用分页和过滤). 以下线程我得到了如何访问传递的模型: .Net Web API IActionFilter.OnActionExecuted return type 但是如何用其他东西改变/替换整个模型
我的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方法,需要使用System.Net.Http导入;命名空间虽然在上面的代码中调用这个方法并不重要.

::更新::

如果您需要更改Content的值类型(例如,返回字符串而不是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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读