操作筛选器中的ASP.NET Web API读取模型

本文关键字:Web API 读取 模型 NET ASP 筛选 操作 | 更新日期: 2023-09-27 18:20:34

当我需要从操作过滤器(AuthorizationFilterAttribute)内的请求主体(或者模型)中获取一些数据时,我有一个特殊情况。我找到了这种方法:

public async override Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
    var model = await actionContext.Request.Content.ReadAsAsync<XYZ>();
    var valueINeed = model.Something;
    etc...
}

这很好,但不幸的是,在调用ReadAsAsync<>之后一旦无法再次读取模型(我猜ReadAsAsync<>会在下划线流中移动位置)。因为它不能再次读取,所以模型不能将其纳入控制器操作:

public async Task<HttpResponseMessage> Put([FromBody]XYZ order)
{
    // order is null here
}

有什么想法如何阅读行动中的模型过滤器或如何解决这个问题吗?

操作筛选器中的ASP.NET Web API读取模型

在Web API中,响应主体是一个只读流。所以,一旦你读了它,你就不能再读了。

考虑在查询params或除body之外的其他参数中传递something