我正在使用 .NET6 并已将版本控制添加到我的 ASP Web API。
我不想在 url mysite.com/api/v1/controller 中包含版本号,而是想将 api-version 添加到 Accept 标头或作为单独的自定义标头。
到目前为止我所尝试的只会产生错误,任何帮助将不胜感激。
[HttpPost]
public async Task<ServiceResponse<DataResponseDto>> Login(DataDto bodyParams)
{
try {
HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(bodyParams), Encoding.UTF8, $"application/json");
var httpClient = _httpClient.CreateClient("MyAPI");
// The various Accept headers I have tried
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json; api-version=1.0"));
httpClient.DefaultRequestHeaders.Add("Accept", "application/json; api-version=1.0");
var response = await httpClient.PostAsync("Data/Send", httpContent);
response.EnsureSuccessStatusCode(); // Throws an exception if not 200 OK
var stream = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<ServiceResponse<DataResponseDto>>(stream);
return result;
}
catch (Exception ex)
{
// logger and stuff
return result;
}
}
不幸的是,我总是得到的响应是“值的格式‘application/json;api-version=1.0’无效。”我觉得还可以。我在邮递员中尝试了这个请求并且它有效。
然后我尝试添加自己的自定义标题
httpClient.DefaultRequestHeaders.Add("api-version", "1.0");
然而,响应是“响应状态代码不表示成功:415(不支持的媒体类型)。”
Ay 帮助在标头中发送我的 API 版本将不胜感激。这个网上资料不多,大部分搜索结果都是发送HTTP版本或者自己写自定义版本控制。
谢谢。
这一行有问题:
httpClient.DefaultRequestHeaders.Add("Accept", "application/json; api-version=1.0");
相反,尝试:
httpClient.DefaultRequestHeaders.Add("Accept", "application/json;");
httpClient.DefaultRequestHeaders.Add("api-version", "1.0");
我第一次尝试时错过了“.Parse()”。
httpClient.DefaultRequestHeaders.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/json; api-version=2.0"));