Obter parâmetros de solicitação de postagem no personalizado AuthorizeAttribute

Eu estou usando isso para obter parâmetros de solicitação do stream de input. O POST está usando o JSON no corpo da solicitação. Na minha function onAuthorize , que é overrride para AuthorizeAttribute . Ele me fornece os parâmetros do corpo da solicitação, mas esvazia o stream de saída para que o controlador não receba nenhum parâmetro de solicitação:

  public override void OnAuthorization(AuthorizationContext filterContext) { filterContext.HttpContext.Request.InputStream.Length() //17 here string jsonPostData; using (var stream = filterContext.HttpContext.Request.InputStream) { stream.Position = 0; using (var reader = new System.IO.StreamReader(stream)) { jsonPostData = reader.ReadToEnd(); } } filterContext.HttpContext.InputStream.Length() //0 here filterContext.HttpContext.Request.InputStream.Position = 0; // still 0 base.OnAuthorization(filterContext); //so when the request reaches controller its empty } 

Eu acho que o que eu estou essencialmente perguntando é como redefinir o stream de input depois de lê-lo

Depois de ler o stream, você pode redefinir sua posição no começo:

 stream.Position = 0; 

Você já fez isso antes de começar a ler o stream, então tente redefini-lo da mesma maneira depois de lê-lo.

Código alterado para isso e começou a funcionar

 public override void OnAuthorization(AuthorizationContext filterContext) { filterContext.HttpContext.Request.InputStream.Length() //17 here string jsonPostData; var stream = request.InputStream; var reader = new System.IO.StreamReader(stream); jsonPostData = reader.ReadToEnd(); filterContext.HttpContext.InputStream.Length() //17 here filterContext.HttpContext.Request.InputStream.Position = 0; //17 here base.OnAuthorization(filterContext); //so when the request reaches controller its empty }