我试图在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);
}
答案 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"];