Rest 使用Accept标头发布.Net Core 3.1-PagSeguro

Rest 使用Accept标头发布.Net Core 3.1-PagSeguro,rest,asp.net-core,http-headers,dotnet-httpclient,flurl,Rest,Asp.net Core,Http Headers,Dotnet Httpclient,Flurl,我正在尝试与支付网关(PagSeguro)集成,根据文档,我必须使用Accept头“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;char

我正在尝试与支付网关(PagSeguro)集成,根据文档,我必须使用Accept头“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标头一样


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

出现问题的原因是分号(;)和单词字符集之间有空格。我们无法使它在.NET3.1中工作,github上甚至出现了一个问题,表明这不是一个问题,是RFC7231规范的实现。每当字符串“var1=val1;var2=val2”时,都会指示o。NET转换为“var1=val1;var2=val2”。然而,在.NET5.0中,发布了一个允许输入原始字符串的实现。另一个选择,根据一篇旧文章,是用.NETFramework4.5创建一些东西

在.NET5.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参考号:


使用.NET Framework 4.5解决问题的用户:

出现问题的原因是分号(;)和单词字符集之间有空格。我们无法使它在.NET3.1中工作,github上甚至出现了一个问题,表明这不是一个问题,是RFC7231规范的实现。每当字符串“var1=val1;var2=val2”时,都会指示o。NET转换为“var1=val1;var2=val2”。然而,在.NET5.0中,发布了一个允许输入原始字符串的实现。另一个选择,根据一篇旧文章,是用.NETFramework4.5创建一些东西

在.NET5.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参考号:


使用.NET Framework 4.5解决问题的用户:

您找到解决方案了吗?您找到解决方案了吗?