And*_*dyP 5 c# dotnet-httpclient
我正在使用HttpClient通过传递标头进行 POST 调用,但在某些时候我收到如下错误:
Request headers must contain only ASCII characters.
Run Code Online (Sandbox Code Playgroud)
使用堆栈跟踪:
at System.Net.Http.HttpConnection.WriteStringAsync(String s)
at System.Net.Http.HttpConnection.WriteHeadersAsync(HttpHeaders headers, String cookiesFromContainer)
at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
public HttpWrapper(string endpoint, Func<IDictionary<string, string>> NewHeader)
{
_httpClient = new HttpClient();
_httpClient.BaseAddress = new Uri(endpoint);
if (NewHeader != null)
{
var headers = NewHeader();
foreach (var header in headers)
{
_httpClient.DefaultRequestHeaders.TryAddWithoutValidation(header.Key, header.Value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要做些什么header.Value来解决这个问题吗?我在网上阅读,所以看起来我需要在这里使用 Utf-8,但不确定如何正确使用?
更新
我今天得到了这样的标头值,它抛出了同样的异常,因为HttpUtility.HtmlEncode它没有做任何事情。另外我不确定这个角色是<0x94>什么?任何想法为什么会发生?
我也不确定
您可以尝试将标头值编码为 HTML:
\n_httpClient.DefaultRequestHeaders.TryAddWithoutValidation(header.Key, HttpUtility.HtmlEncode(header.Value));\nRun Code Online (Sandbox Code Playgroud)\n您的字符串 Erg\xc3\xa4nzendes 将是“ Ergänzendes”。
| 归档时间: |
|
| 查看次数: |
2951 次 |
| 最近记录: |