C# ASP.NET Web API读取模型内部操作筛选器

C# ASP.NET Web API读取模型内部操作筛选器,c#,asp.net,asp.net-mvc,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,当我需要从动作过滤器(AuthorizationFilterAttribute)内部的请求主体(或者模型)获取一些数据时,我有一个特殊的情况。我找到了这样的方法: public async override Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken) { var model = await actionContext.Request.Cont

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

public async override Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
    var model = await actionContext.Request.Content.ReadAsAsync<XYZ>();
    var valueINeed = model.Something;
    etc...
}
AuthorizationAsync上的公共异步重写任务(HttpActionContext actionContext,CancellationToken CancellationToken)
{
var model=await actionContext.Request.Content.ReadAsAsync();
var Valueined=模型。某物;
等
}
这很好,但不幸的是,在调用ReadAsAsync一次之后,就不可能再次读取模型了(我猜ReadAsAsync将移动下划线流中的位置)。由于无法再次读取,模型无法将其转换为控制器操作:

public async Task<HttpResponseMessage> Put([FromBody]XYZ order)
{
    // order is null here
}
public异步任务Put([FromBody]XYZ顺序)
{
//这里的订单为空
}

有没有关于如何读取动作中的模型过滤器或如何解决此问题的想法?

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

考虑在查询参数或中传递
something
,而不是body