我轉化HttpContent
分爲以下DTO:HttpContent頭不一致枚舉
public class ContentDto
{
public string ContentType {get; set;}
public string Headers {get; set; }
public object Data { get; set; }
public ContentDto(HttpContent content)
{
Headers = content.Headers.Flatten();
// rest of the setup
}
}
和我在其上運行一些單元測試:
[Fact]
public void CanBuild()
{
var content = new StringContent("some json", Enconding.UTF8, "application/json");
var dto = new ContentDto(content);
var contentHeaders = content.Headers.Flatten();
Assert.Equal(contentHeaders, dto.Headers);
}
而且,由於Content-Length
頭不在於測試失敗捕獲在我的dto上。但是,如果我這樣做:
[Fact]
public void CanBuild()
{
var content = new StringContent("some json", Enconding.UTF8, "application/json");
var contentHeaders = content.Headers.Flatten();
var dto = new ContentDto(content);
Assert.Equal(contentHeaders, dto.Headers);
}
測試通過並捕獲所有頭文件。更我也試過這樣:
[Fact]
public void CanBuild()
{
var content = new StringContent("some json", Enconding.UTF8, "application/json");
var dto = new ContentDto(content);
var contentHeaders = content.Headers.Flatten();
var dto1 = new ContentDto(content);
Assert.Equal(contentHeaders, dto.Headers);
Assert.Equal(contentHeaders, dto1.Headers);
}
,自dto
失敗沒有Content-Length
頭,但dto1
一樣。我甚至嘗試得到一個廠般方法像這裏面的標題:
public static ContentDto FromContent<T>(T content) where T : HttpContent
{
// same as the constructor
}
,看看是否有什麼特別的關於Content-Length
頭的StringContent
類,但它並沒有區別,不管我使用構造函數(使用基類HttpContent
)或通用方法FromContent
(在這種情況下使用實際的StringContent),結果是相同的。
所以我的問題是:
是這樣的HttpContent.Headers
預期的行爲?
是否有一些特定於實際HttpContent
類型的標題?
我在這裏錯過了什麼?
注:這是Flatten
擴展方法的代碼:
public static string Flatten(this HttpHeaders headers)
{
var data = headers.ToDictionary(h => h.Key, h => string.Join("; ", h.Value))
.Select(kvp => $"{kvp.Key}: {kvp.Value}");
return string.Join(Environment.NewLine, data)
}
ToDictionary中的項目順序不能保證,這是否產生相同的結果?headers.ToDictionary(h => h.Key,h => string.Join(「;」,h.Value)) .Orderby(x => x.Key).Select(kvp => $「{kvp.Key}:{kvp.Value}」)'? –
@AkashKava問題不在於命令。問題是'Content-Length'標題並不總是在那裏。 – Luiso
@Luiso,你可以展示[mcve],以便你的問題可以被準確地複製。這將有助於找到解決問題的辦法。 – Nkosi