私はHttpContent次のdtoに変換しています:
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がないため失敗しますが、ヘッダーはあります。次のように、 Factory のようなメソッド内でヘッダーを取得しようとしました。Content-Lengthdto1
public static ContentDto FromContent<T>(T content) where T : HttpContent
{
// same as the constructor
}
StringContentヘッダーに関するクラスに何か特別なものがあるかどうかを確認しますが、コンストラクター (基本クラスを使用) またはジェネリック メソッド(この場合は実際の StringContent を使用) を使用しても結果はContent-Length変わりませんでした。同じ。HttpContentFromContent
だから私の質問は:
それはの意図された動作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)
}