繁体   English   中英

HTTP 客户端补丁方法与 Asp.net 核心 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM