【问题标题】:Get Post request parameters in custom AuthorizeAttribute在自定义 AuthorizeAttribute 中获取 Post 请求参数
【发布时间】:2014-01-29 20:09:37
【问题描述】:

我正在使用this 从输入流中获取请求参数。 POST 在请求正文中使用 JSON。在我的onAuthorize 函数中,它覆盖了AuthorizeAttribute。它确实给了我请求主体参数,但它清空了流,因此控制器没有收到任何请求参数:

 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
}

我想我本质上要问的是如何在阅读后重置输入流

【问题讨论】:

    标签: c# asp.net-mvc json authentication


    【解决方案1】:

    读完流后,你可以在开头重置它的位置:

    stream.Position = 0;
    

    您在开始读取流之前已经这样做了,因此请尝试在读取后以相同的方式重置它。

    【讨论】:

    • Darin 检查我对上面发布的代码的编辑,似乎它仍然无法正常工作
    • 如果您没有在您的授权属性中读取输入流,您在控制器中获得了正确的值吗?
    • 是的,我需要阅读它,因为它是授权的一部分,这就是我获取帐户 ID 进行授权的方式
    • 通常情况下,如果你将流的位置设置为0,控制器应该能够接收到正确的模型。
    【解决方案2】:

    将代码更改为此并开始工作

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-12
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 2019-01-29
      • 2023-03-19
      相关资源
      最近更新 更多