gpt4 book ai didi

c# - 如何在 IActionFilter Asp.net core 中读取 OnActionExecuting(ActionExecutingContext context) 中的请求体

转载 作者:行者123 更新时间:2023-12-03 18:06:51 25 4
gpt4 key购买 nike

我正在向 Controller 发送 AES 加密请求正文,以下是一个示例:

(using crypto-js) 
{body: "U2FsdGVk186Jj7LySqT966qTdpQZwiR+wR0GjYqBzR4ouFAqP8Dz8UPPTv"}

我已经创建了 Action 过滤器,所以无论何时发布请求,我都可以在 Action 过滤器中解密请求,而不是将解密的请求传递给所需的 Controller 。

解密后请求:
{Name: "admin123" }

那么如何在操作过滤器中获取加密的请求正文?以及如何将解密的请求正文传递给 Controller

我在 ASP.NET core 中尝试过 WEB API StreamReader但它返回一个空字符串

我想将解密的请求正文传递给 Controller

筛选
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;
}

Controller
[HttpPost("[action]")]
public async Task<string> MyControllerName(InfoReq info)
{

}

类(class)
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;
}

您应该必须将流位置设置为零(0)
request.Body.Position = 0 .否则,您将获得空体异常。

关于c# - 如何在 IActionFilter Asp.net core 中读取 OnActionExecuting(ActionExecutingContext context) 中的请求体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56258219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com