【问题标题】:Post with Accept Header .Net Core 3.1 - PagSeguro使用 Accept Header .Net Core 3.1 发布 - PagSeguro
【发布时间】:2020-06-16 17:51:41
【问题描述】:

我正在尝试与支付网关 (PagSeguro) 集成,根据文档,我必须使用 Accept Header "application/vnd.pagseguro.com.br.v3+json;charset=ISO-8859-1 ”。

尝试使用代码不起作用:

HttpClient.DefaultRequestHeaders.Clear();
HttpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.pagseguro.com.br.v3+json;charset=ISO-8859-1");
var content = new StringContent(json, Encoding.Default, "application/json");
var response = await HttpClient.PostAsync(enderecoPreApprovals, content);
var responsestr = await response.Content.ReadAsStringAsync();

我也尝试使用文档中的相同代码:

var client = new RestClient(url) {Timeout = -1};
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Accept", "application/vnd.pagseguro.com.br.v3+json;charset=ISO-8859-1");
request.AddParameter("application/json", content, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

并使用 flurl:

var response = await addresPreApprovals
                    .WithHeader("Accept", "application/vnd.pagseguro.com.br.v3+json;charset=ISO-8859-1")
                    .WithHeader("Content-Type", "application/json")
                    .PostJsonAsync(adesaoDto);

所有回复都是Accept header field is mandatory.。就像 Accept Header 无法识别一样。

问题不在 API 中,为什么我尝试使用 Postman 和 Insomnia 并且效果很好。

【问题讨论】:

  • 你找到解决办法了吗?

标签: rest asp.net-core http-headers dotnet-httpclient flurl


【解决方案1】:

问题是由于分号 (;) 和单词charset 之间的空格造成的。我们无法让它在 .NET 3.1 中运行,甚至在 github 上也出现了一个问题,表明这不是问题,它是 RFC 7231 规范的实现。每当字符串“var1 = val1; var2 = val2”时,都会指示 o。 NET 转换为“var1 = val1;var2 = val2”。但是,在 .NET 5.0 中,发布了一个允许输入原始字符串的实现。另一种选择,根据旧帖子,是使用 .NET Framework 4.5 创建一些东西

在 .NET 5.0 中

    var acceptValue = "application/vnd.pagseguro.com.br.v1+json;charset=ISO-8859-1";
    var requestMessage = new HttpRequestMessage(HttpMethod.Post, urlApprovals);
    requestMessage.Headers.TryAddWithoutValidation("accept", acceptValue);

GitHub 参考:https://github.com/dotnet/runtime/issues/30171

使用 .NET Framework 4.5 解决问题的用户:https://stackoverflow.com/a/40162071/2112736

【讨论】:

    猜你喜欢
    • 2018-05-11
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    相关资源
    最近更新 更多