当我需要从动作过滤器(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
}
有关如何阅读动作过滤器中的模型或如何解决此问题的任何想法?
答案 0 :(得分:1)
在Web API中,响应正文是仅向前转发的流。所以一旦你阅读它,你就无法再读它。
考虑将something
传递给查询参数或some other parameter,而不是正文。