jestem przekształcając HttpContent
w następującym DTO:HttpContent Główki niespójne wyliczenie
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
}
}
I używam kilka testów jednostkowych na nim:
[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);
}
I że test nie powiedzie się, ponieważ nagłówek Content-Length
nie jest złapany na moim dto. Jeśli jednak to zrobię:
[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);
}
Test przechodzi i wszystkie nagłówki są przechwytywane. Jeszcze bardziej ja też próbowałem to:
[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);
}
i to nie od dto
nie posiada nagłówka Content-Length
, ale dto1
robi. Próbowałem nawet coraz nagłówki wewnątrz Fabrycznie jak sposobu jak ten:
public static ContentDto FromContent<T>(T content) where T : HttpContent
{
// same as the constructor
}
aby zobaczyć, czy jest coś specjalnego w klasie StringContent
dotyczących nagłówków Content-Length
, ale to nie miało znaczenia, nie ważne czy ja użył konstruktora (który używa klasy bazowej HttpContent
) lub ogólnej metody FromContent
(używając w tym przypadku rzeczywistej StringContent) wynik był taki sam.
Więc moje pytania to:
Czy to zamierzone zachowanie HttpContent.Headers
?
Czy są jakieś nagłówki właściwe dla rzeczywistego typu HttpContent
?
Czego tu mi brakuje?
Uwaga: Jest to kod dla metody Flatten
rozszerzenia:
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)
}
Kolejność pozycji w ToDictionary nie jest gwarantowana, czy to daje taki sam wynik 'headers.ToDictionary (h => h.Key, h => string.Join ("; ", h.Value)) .Orderby (x => x.Key). Wybierz (kvp => $ "{kvp.Key}: {kvp.Value}") '? –
@AkashKava problem nie dotyczy zamówienia. Problemem są nagłówki "Content-Length", które nie zawsze istnieją. – Luiso
@Luiso, czy możesz pokazać [mcve], aby Twój problem mógł być dokładnie replikowany. Pomoże to w znalezieniu rozwiązania Twojego problemu. – Nkosi