我有一个类似于以下内容的 Controller :
[HttpPut]
[Route("")]
public async Task<IActionResult> Put([FromBody]List<MyObject> fromBody)
{
if (fromBody == null)
throw new InvalidOperationException($"{nameof(fromBody)} must not be null");
// Unimportant junk
}
InvalidOperationException 在极少数情况下会在请求期间抛出。但是原始请求数据具有正确的内容和 header (我使用 raygun 进行异常报告,它捕获原始请求并且 json 内容在那里并且有效)。有什么原因会导致这种情况发生吗?
header 在成功请求和错误请求之间是相同的,如下所示(我的网站和任何 Azure id 已编辑):
Connection: "Keep-Alive"
Content-Type: "application/json;charset=utf-8"
Accept: "application/json;charset=utf-8"
Accept-Encoding: "gzip"
Host: "redacted"
Max-Forwards: "10"
User-Agent: "Dalvik/2.1.0 (Linux; U; Android 6.0.1; Nexus 5 Build/M4B30Z)"
Content-Length: "55392"
X-WAWS-Unencoded-URL: "redacted"
X-Original-URL: "redacted"
X-ARR-LOG-ID: "redacted"
DISGUISED-HOST: "redacted"
X-SITE-DEPLOYMENT-ID: "redacted"
WAS-DEFAULT-HOSTNAME: "redacted"
X-Forwarded-For: "redacted"
X-ARR-SSL: "redacted"
X-Forwarded-Proto: "https"
MS-ASPNETCORE-TOKEN: "redacted"
X-Original-For: "redacted"
X-Original-Proto: "http"
不幸的是,由于政策超出我的控制范围,我无法透露消息的实际正文,但它由 100% 有效的 json 对象数组组成,在 Content-Length 方面总长度正确。当我的客户端使用相同的内容/ header 进行重试时,它会成功。
我怀疑可能是超时请求还在进入controller,然后由于超时无法读取请求体。客户端是安卓设备,所以他们不断地进出互联网连接。但我不知道为什么在那种情况下它会进入 Controller 。
最佳答案
关于c# - APIController FromBody arg 有时在放置请求上为空,但原始请求具有有效主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47799667/