在搜索如何处理HTTP请求头时,我看到很多示例使用以下结构来初始化HttpRequestMessage
:
var request = new HttpRequestMessage()
{
Headers =
{
{ HttpRequestHeader.Authorization.ToString(), Token },
{ HttpRequestHeader.ContentType.ToString(), "multipart/form-data" }
},
Method = HttpMethod.Post,
RequestUri = new Uri(endpointUrl),
Content = content
};
这似乎很好地运作了,编译器没有抱怨,甚至没有注册警告,但我对
Headers
字段的初始化非常困惑。在源代码中,
Headers
字段被定义为:public HttpRequestHeaders Headers
{
get
{
if (headers == null)
{
headers = new HttpRequestHeaders();
}
return headers;
}
}
我在想,如何初始化只有get函数的字段?即使它以某种方式初始化了底层的私有HttpRequestHeaders headers(尽管我相当确定它并不是这样工作的),我从未见过使用C#中的“Field = {{...},{...}}”类型初始化的情况。 这类初始化方式类似于字典初始化器,但缺少“new HttpRequestHeaders”,因此不能使用该方法。这是我所见过的唯一一次使用此类型初始化,并且在文档或SO上找不到任何参考资料。
{ HttpRequestHeader.Authorization.ToString(), Token }
和{ HttpRequestHeader.ContentType.ToString(), "multipart/form-data" }
这两部分感到困惑,而不是特别关注在只读属性上使用集合初始化器语法?(如果是这样,请编辑你的问题以澄清……) - user19858830