私は、次のDTOにHttpContent
を変換しています: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);
}
、それはContent-Length
ヘッダーを持っていないdto
ので、失敗しますが、dto1
行います。さらに、私もこれを試してみました。私ならば、どんなにをContent-Length
ヘッダに関するStringContent
クラスに関する特別な何かがあったかどうかを確認するために
public static ContentDto FromContent<T>(T content) where T : HttpContent
{
// same as the constructor
}
が、それは何の違いが行われていない:私もこのような工場のようなメソッド内のヘッダを取得しようとしましたコンストラクタ(基本クラス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の項目の並び順は保証されていません。同じ結果を出力しますか? => x.Key).Select(kvp => $ "{kvp.Key}:{kvp.Value}") '? –
@AkashKavaの問題は注文に関するものではありません。問題は常に存在するとは限らない 'Content-Length'ヘッダーです。 – Luiso
@ Luiso、問題を正確に複製できるように[mcve]を表示できますか?これはあなたの問題に対する解決策を見つけるのに役立ちます。 – Nkosi