ASP.NET Core从ActionExecutedContext ActionFilter获取请求正文

时间:2017-01-25 11:24:59

标签: c# .net asp.net-core asp.net-core-mvc

我试图在ActionFilterAttribute中获取POST请求的主体。 bodyString返回为空而不会出现任何异常。我正在用一个简单的{“name”:“value”} JSON测试它。

public override void OnActionExecuted(ActionExecutedContext context)
    {
        string bodyString = string.Empty;

            using (System.IO.MemoryStream m = new System.IO.MemoryStream())
            {
                try
                {
                    if (context.HttpContext.Request.Body.CanSeek == true)
                        context.HttpContext.Request.Body.Position = 0;

                    context.HttpContext.Request.Body.CopyTo(m);

                    bodyString = Encoding.UTF8.GetString(m.ToArray());
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }

    base.OnActionExecuted(context);
}

1 个答案:

答案 0 :(得分:1)

MemoryStream无法读取数据的原因,因为[FromBody]已经从我的方法中读取了数据:

[HttpPost]
[ServiceFilter(typeof(ETagFilter))]
public IActionResult Post([FromBody]JToken body) 
{ 
    //Do something with the data
}

要在我使用的ActionFilter中访问正文:

var bodyString = context.ActionArguments["body"];