我转化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