Azure上的.NET Framework API有时会接收全部为零的正文字节



我有一个.NET Framework API托管在Azure上。我在这个API上有一个POST端点,通过主体接收一些数据(json内容,utf-8编码(。大多数请求都是成功的,但是,有时我会得到NullReferenceException,因为我的模型是null

我正在记录该端点上的请求信息,我得到了:

  • 成功请求和不成功请求的请求内容长度相同
  • 当正文为null时,内容字节都是零。因此,这并不是说主体丢失了:它在那里,但不知何故,请求字节数组的所有位置都被转换为零

此外,通过在我的一端使用Fiddler,我知道我在任何时候都能正确发送身体。

这真的很奇怪。

有什么想法吗?

编辑:我无法在本地主机或本地IIS上重现这种行为,只能在Azure上重现。

编辑:我们有一个扩展方法来读取请求信息:

public static string GetBody(this HttpRequest request)
{
using (var stream = new MemoryStream())
{
request.InputStream.Position = 0;
request.InputStream.CopyTo(stream);
request.InputStream.Position = 0;
stream.Position = 0;
var bytes = stream.ToArray();
stream.Position = 0;
return $"{Encoding.UTF8.GetString(bytes).Replace(Environment.NewLine, "").Replace("  ", "")} | RequestLength: {request.InputStream.Length} | ArrayLength: {bytes.Length} | Array: {string.Join(" ", bytes)}";
}
}

您可以使用请求.InputStream.CanRead要求.InputStream.CanSeek,这样您就可以安全地在流中重新定位光标,然后再读取它。

直接从请求中读取。重新读取时,InputStream将返回null,即使存在数据。

请参阅此处了解更多信息

最新更新