我们有一个http服务器。服务器接收带有json主体的http post请求。但有时json对象无效。在本例中,我们希望将body读取为string。如何在。net 5.0中实现呢?
谢谢。
My Code:
[HttpPost]
[Route("api")]
public async Task<string> api([FromBody] string requestContent)
{
// When invalid json request receieve, requestContent is null
return requestContent;
}
可以在控制器流之外读取主体。但首先,您应该激活请求体缓冲。在Startup
类的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);