【发布时间】:2020-07-24 19:35:21
【问题描述】:
我们的一个客户坚持将原始请求正文发送到我们的 API(不是 json 或 xml),并且由于 .net 核心默认不支持它,我使用了与以下类似的想法:
[HttpPost]
[Route("example/{path}")]
public async Task<string> ReadStringDataManual(string path)
{
using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
{
return await reader.ReadToEndAsync();
}
}
但是,在生产中,我们意识到 API 在加载时会引发以下异常。
System.Runtime.CompilerServices.TaskAwaiter:UnsafeOnCompletedInternal (method time = 1 ms, total time = 1 ms)
undefined(2011ms): await continuation
我不确定它是否与 Kestrel 相关,但我相信这是因为广泛的 I/O 操作。我还尝试了一种天真的方法——在方法签名中添加一个带有[FromBody] 属性的参数,但没有运气。
是否有任何其他选项可以在不使用流阅读器的情况下读取原始请求正文?
谢谢。
【问题讨论】:
-
path中有什么内容?它是什么格式?为什么你必须使用流? -
一段时间过去了,但似乎 asp.net 正在得到一些改进......看看来自twitter.com/davidfowl/status/1480236116934467584的这条推文
标签: c# .net asp.net-core asp.net-web-api .net-core