作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在向 Controller 发送 AES 加密请求正文,以下是一个示例:
(using crypto-js)
{body: "U2FsdGVk186Jj7LySqT966qTdpQZwiR+wR0GjYqBzR4ouFAqP8Dz8UPPTv"}
{Name: "admin123" }
StreamReader
但它返回一个空字符串
public void OnActionExecuting(ActionExecutingContext context)
{
var req = context.HttpContext.Request;
using (StreamReader reader = new StreamReader(req.Body, Encoding.UTF8, true, 1024, true))
{
bodyStr = reader.ReadToEnd();
}
req.Body.Position = 0;
}
[HttpPost("[action]")]
public async Task<string> MyControllerName(InfoReq info)
{
}
public class InfoReq
{
public string Name{ get; set; }
}
最佳答案
在这里,您需要采用中间件方法。阅读文档 Middleware
如果你想读取流,你必须 request.EnableRewind().because Request. body
是不支持第二次读取流的只读和仅转发流。
request.EnableRewind();
original stream back on the Response. Body
public void OnActionExecuting(ActionExecutingContext context)
{
var request = context.HttpContext.Request;
try
{
request.EnableRewind();
using (StreamReader reader = new StreamReader(request.Body))
{
return reader.ReadToEnd();
}
}
finally
{
request.Body = request;
}
context.Request.Body.Position = 0
return string.Empty;
}
request.Body.Position = 0 .
否则,您将获得空体异常。
关于c# - 如何在 IActionFilter Asp.net core 中读取 OnActionExecuting(ActionExecutingContext context) 中的请求体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56258219/
我是一名优秀的程序员,十分优秀!