Azure函数v1的Http响应中不存在内容长度标头

Azure函数v1的Http响应中不存在内容长度标头,azure,azure-functions,Azure,Azure Functions,我们有一个azure函数,它在azure v1(.NET Framework 4.7)中运行。在http响应中,我们试图设置内容长度,但它没有流向客户端。它将传输编码头的值设置为chunked。 让我们看看我们是如何设置的 var body = <some byte array data> var response = new HttpResponseMessage(); response.Content = new ByteArrayContent(body); response.

我们有一个azure函数,它在azure v1(.NET Framework 4.7)中运行。在http响应中,我们试图设置内容长度,但它没有流向客户端。它将传输编码头的值设置为chunked。 让我们看看我们是如何设置的

var body = <some byte array data>
var response = new HttpResponseMessage();
response.Content = new ByteArrayContent(body);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentLength = body.Length;
但这似乎毫无用处。 以前会有人面临这样的问题吗? 顺便说一句,当我在azure function v2(.NET Core 2.2)上运行相同的代码时,它可以工作

更新:传输编码头我们可以通过wireshark捕获数据包。


Update-2:对于本地运行的函数,会发生这种情况。当我们在azure上发布函数时,它确实提供了内容长度标题。在本地,我猜它(v1)使用了nodejs模拟器,这似乎有一些问题。无论如何,一旦我们找到任何解决方法,将在此处更新

如果传输编码设置为分块,则无法设置内容长度<代码>传输编码:渐进式渲染不需要分块。但是,在发送第一个字节之前,如果总内容长度未知,则需要使用它

基本上,以八位字节为单位的内容长度的十进制值表示实体长度和传输长度。如果存在某些传输编码,则这两个长度将不同,因此应忽略内容长度值

我在函数v1中使用您的代码进行测试,但不使用
传输编码
它也工作得很好


因此,如果要设置特定的内容长度,可以删除
传输编码

如果传输编码设置为分块,则无法设置内容长度<代码>传输编码:渐进式渲染不需要分块。但是,在发送第一个字节之前,如果总内容长度未知,则需要使用它

基本上,以八位字节为单位的内容长度的十进制值表示实体长度和传输长度。如果存在某些传输编码,则这两个长度将不同,因此应忽略内容长度值

我在函数v1中使用您的代码进行测试,但不使用
传输编码
它也工作得很好


因此,如果您想设置特定的内容长度,可以删除
传输编码

,感谢Joey的快速响应。当我们在调试检查模式下查看标题时,它确实显示了内容长度,但当它流到客户端时,我们仍然可以看到传输编码:通过使用wireshark捕获数据包进行分块。已使用wireshark屏幕截图更新问题。我还尝试显式删除标题:
response.Headers.remove(“传输编码”)
,但这也不起作用。同样,Azure功能V2也适用于此。我猜一定有Azure function V1正在进行的一些内部处理,而V2Tanks Joey没有这样做,以便快速响应。当我们在调试检查模式下查看标题时,它确实显示了内容长度,但当它流到客户端时,我们仍然可以看到传输编码:通过使用wireshark捕获数据包进行分块。已使用wireshark屏幕截图更新问题。我还尝试显式删除标题:
response.Headers.remove(“传输编码”)
,但这也不起作用。同样,Azure功能V2也适用于此。我猜一定有Azure function V1正在进行的一些内部处理,而在V2中没有发生
response.Headers.TransferEncoding.Add(TransferCodingHeaderValue.Parse("identity"))