[英]Using factory method to create typed HTTP client, ASP.NET Core 2.1
[英]HTTP Client Patch method with Asp.net core 2.1, bad request
使用HttpClient
执行 PATCH 方法请求时出现错误请求错误
var patchDoc = new JsonPatchDocument<ClientOrganisationRequestArgs>();
patchDoc.Replace(e => e.Name, clientOrganisationRequestArgs.Name);
var serializedDoc = JsonConvert.SerializeObject(patchDoc);
var requestContent = new StringContent(serializedDoc, Encoding.UTF8, "application/json-patch+json");
var httpResponseMessage = await _httpClient.PatchAsync(
$"api/orgs/{clientOrganisationRequestArgs.ClientRefId}", requestContent);
Model
public class ClientOrganisationRequestArgs
{
public int ClientRefId { get; set; }
public string Name { get; set; }
public string DefaultTimezone => "AUSTRALIA/SYDNEY";
public string CustomStylePath { get; set; }
}
收到 400 错误请求
Postman 还显示 500 内部服务器错误,正文为原始
授权并接受header
_httpClient.DefaultRequestHeaders.Add(
HeaderNames.Accept, "application/vnd.yellowfin.api-v1.3+json");
_authorizationHeader =
$"{_authorizationHeader}, token={accessToken.SecurityToken}";
_httpClient.DefaultRequestHeaders.TryAddWithoutValidation(
HeaderNames.Authorization, _authorizationHeader);
你有application/json-patch+json
作为内容类型
//...
var requestContent = new StringContent(serializedDoc, Encoding.UTF8, "application/json-patch+json");
//...
但根据显示的文档,它期望简单的application/json
内容类型 header
var requestContent = new StringContent(serializedDoc, Encoding.UTF8, "application/json");
同样基于所示文档中的示例,有效负载是一个普通的 JSON 文档,并且看起来并不真正遵循 JSON 补丁文档格式。 这可能会导致 API 无法识别请求内容。
我建议序列化有效负载以匹配给定的示例
string serializedDoc = JsonConvert.SerializeObject(clientOrganisationRequestArgs);
StringContent requestContent = new StringContent(serializedDoc, Encoding.UTF8, "application/json");
string url = $"api/orgs/{clientOrganisationRequestArgs.ClientRefId}";
var httpResponseMessage = await _httpClient.PatchAsync(url, requestContent);
假设
public class ClientOrganisationRequestArgs {
[JsonProperty("clientRefId")]
public int ClientRefId { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("defaultTimezone")]
public string DefaultTimezone => "AUSTRALIA/SYDNEY";
[JsonProperty("customStylePath")]
public string CustomStylePath { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.