【发布时间】:2019-09-02 19:28:51
【问题描述】:
是否可以将默认内容类型设置为“application/json;v=2.0”。我说默认是因为我使用的是 HttpClient 类,并且我使用 DefaultRequestHeaders 将我的代理设置为默认值。
我按照这个示例创建了我的标题https://stackoverflow.com/a/10679340/196526,但我也使用了版本控制,有关版本控制的信息保存在 ContentT-Type 中
public class BankAccountProxy
{
public void SetToken()
{
Client = new HttpClient();
Client.BaseAddress = new Uri(System.Configuration.ConfigurationManager.AppSettings["ApiRoute"]);
Client.DefaultRequestHeaders.Accept.Clear();
Client.DefaultRequestHeaders.Add("Token", ApiInformations.ApiToken);
Client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue($"application/json;v=2.0"));
}
public async Task<IEnumerable<BankAccount>> Get()
{
HttpResponseMessage response = await Client.GetAsync($"/api/BankAccount/");
response.EnsureSuccessStatusCode();
IEnumerable<BankAccount> bankAccount;
bankAccount = await response.Content.ReadAsAsync<IEnumerable<BankAccount>>();
return bankAccount;
}
}
当我运行这段代码时,我得到一个
异常消息:值'application/json;v=2.0'的格式是 无效。
因为 v=2.0 可能不是有效的 MediaTypeWithQualityHeaderValue。
我想要确保始终在我的 Content-Type 标头值中发送版本信息。我怎样才能初始化它?如何告诉我的代码我的默认内容类型不是质量标头而是有效标头。
这里的信息是我在 Postman 上完美运行的查询:
【问题讨论】:
-
可以试试,Client.DefaultRequestHeaders.Add("Accept", "application/json;v=2.0");
-
我认为它有效,但我需要的是“Content-Type”,当我添加 Client.DefaultRequestHeaders.Add("Content-Type", "application/json;v=2.0");行我得到一个'误用的标题名称。确保请求标头与 HttpRequestMessage 一起使用,响应标头与 HttpResponseMessage 一起使用,内容标头与 HttpContent 对象一起使用。例外。
-
关于版本控制 API 的文档在这里 github.com/Microsoft/aspnet-api-versioning/wiki/… 我不明白为什么他们有时使用 Content-Type 有时使用 Accept 标头参数。
标签: c# rest http-headers asp.net-web-api2