我在可移植类库(针对 .NET 4.5 和 Windows Phone 8.1)中有一个类,它使用 HttpClient (System.Net.Http.HttpClient) 类将字符串发布到 Web 服务。该服务要求我在请求中设置Accept标头以指定 API 版本,如下所示:
Accept: vnd.servicehost.v1+json
我在课堂上这样尝试过:
_httpClient.DefaultRequestHeaders.Add("Accept", "vnd.servicehost.v1+json");
它会抛出一个 FormatException 说明我的 Accept 标头无效。所以我尝试这样设置:
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("vnd.servicehost.v1+json"));
它仍然抛出 FormatException。我发现这个答案说服我尝试使用这样的TryAddWithoutValidation()
方法:
_httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "vnd.servicehost.v1+json");
最后,我没有收到 FormatException!当我从我的 .NET 4.5 单元/集成测试项目中调用它时,我的 post 方法有效。我得到了 200 和我期望的数据。但是,当我从 Windows Phone 8.1(或模拟器)调用相同的方法时,服务会响应并告诉我我在请求中指定的版本无效。
我不知道如何让 Fiddler 向我展示来自我的 Windows Phone 模拟器的流量,以查看实际请求的样子。我的猜测是永远不会添加 Accept 标头。我希望经验丰富的 Windows Phone 开发人员能够认识到我正在犯的一些明显错误......