2014-09-03 51 views
0

我有一个特殊情况,当我需要从请求主体(或模型让说)里面的行动过滤器(AuthorizationFilterAttribute)获取一些数据。我发现这种方式:ASP.NET Web API读取模型里面的动作过滤器

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 
} 

任何思考如何阅读行为过滤器或如何模型来解决这个问题呢?

回答

1

在Web API中,响应正文是只读前向流。所以一旦你读了它,你不能再读它。

考虑将查询参数中的somethingsome other parameter以外的值传递给body。