我可以在 .Net 5.0 中将请求正文作为字符串获取吗?
Can I get request body as string in .Net 5.0?
我们有一个 HTTP 服务器。服务器接收带有 json 正文的 http post 请求。但有时 json 对象无效。在这种情况下,我们希望将正文读取为字符串。我如何在 .Net 5.0 中实现它。
谢谢。
我的代码:
[HttpPost]
[Route("api")]
public async Task<string> api([FromBody] string requestContent)
{
// When invalid json request receieve, requestContent is null
return requestContent;
}
您可以在控制器流程之外读取主体。但首先,您应该激活请求正文缓冲。
在 Startup
class 的 Configure
方法上,在 app.UseEndpoints
.
之前使用此中间件
app.Use(async (context, next) =>
{
context.Request.EnableBuffering();
await next.Invoke();
});
然后你可以像这样从任何动作中读取正文:
Request.Body.Seek(0, SeekOrigin.Begin)
var body = await new StreamReader(Request.Body).ReadToEndAsync();
最好不要以 json 格式发送正文,您应该以字符串格式发送。对于您提供的当前代码片段的示例:
要求:
"{\"username\":\"ak\", \"password\": \"142437630028jdnj\"}"
回复:
{"username":"ak", "password": "142437630028jdnj"}
您必须将 json 正文解析为字符串,然后再发送它们,如下所示:
JObject.Parse(str);
我们有一个 HTTP 服务器。服务器接收带有 json 正文的 http post 请求。但有时 json 对象无效。在这种情况下,我们希望将正文读取为字符串。我如何在 .Net 5.0 中实现它。
谢谢。
我的代码:
[HttpPost]
[Route("api")]
public async Task<string> api([FromBody] string requestContent)
{
// When invalid json request receieve, requestContent is null
return requestContent;
}
您可以在控制器流程之外读取主体。但首先,您应该激活请求正文缓冲。
在 Startup
class 的 Configure
方法上,在 app.UseEndpoints
.
app.Use(async (context, next) =>
{
context.Request.EnableBuffering();
await next.Invoke();
});
然后你可以像这样从任何动作中读取正文:
Request.Body.Seek(0, SeekOrigin.Begin)
var body = await new StreamReader(Request.Body).ReadToEndAsync();
最好不要以 json 格式发送正文,您应该以字符串格式发送。对于您提供的当前代码片段的示例:
要求:
"{\"username\":\"ak\", \"password\": \"142437630028jdnj\"}"
回复:
{"username":"ak", "password": "142437630028jdnj"}
您必须将 json 正文解析为字符串,然后再发送它们,如下所示:
JObject.Parse(str);