ASP.NET Web API读取动作过滤器内部的模型

时间:2014-09-03 14:13:27

标签: 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.Content.ReadAsAsync<XYZ>();
    var valueINeed = model.Something;
    etc...
}

这很好但在调用ReadAsAsync&lt;&gt;之后很不幸一旦无法再次读取模型(我猜ReadAsAsync&lt;&gt;在下划线流中移动位置)。因为无法再次读取模型而不能将其转换为控制器操作:

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

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

1 个答案:

答案 0 :(得分:1)

在Web API中,响应正文是仅向前转发的流。所以一旦你阅读它,你就无法再读它。

考虑将something传递给查询参数或some other parameter,而不是正文。