【问题标题】:ASP.NET Core Get Request Body from ActionExecutedContext ActionFilterASP.NET Core 从 ActionExecutedContext ActionFilter 获取请求正文
【发布时间】:2017-01-25 11:24:59
【问题描述】:

我正在尝试在 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);
}

【问题讨论】:

  • 请出示您的 POST 请求

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 和 ETagFilter ?
猜你喜欢
  • 2015-01-31
  • 1970-01-01
  • 2019-02-17
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
  • 1970-01-01
  • 2011-12-27
相关资源
最近更新 更多