gpt4 book ai didi

azure - Dotnet Core 2.0.3 迁移 |编码无法转换字节 [8B]

转载 作者:行者123 更新时间:2023-12-03 01:45:20 25 4
gpt4 key购买 nike

我不确定这是否应该直接转到 github,但我想如果有人以前遇到过这个问题,我想先在这里检查一下。

我最近将我的一个应用程序从 1.1.4 升级为使用 dot net 2.0.3。

本地一切正常,但当我部署到 azure 的应用程序服务时,出现以下异常。

System.Text.DecoderFallbackException: Unable to translate bytes [8B] at index 1 from specified code page to Unicode. 

调用它的代码是一个在应用程序之间进行通信的 httpclient。

public async Task<T1> Get<T1>(string url, Dictionary<string, string> urlParameters = null) where T1 : DefaultResponse, new()
{
var authToken = _contextAccessor.HttpContext.Request.Cookies["authToken"];
using (var client = new HttpClient().AcceptJson().Acceptgzip().AddAuthToken(authToken))
{
var apiResponse = await client.GetAsync(CreateRequest(url, urlParameters));

T1 output;
if (apiResponse.IsSuccessStatusCode)
{
output = await apiResponse.Content.ReadAsAsync<T1>();
//output.Succeeded = true;
}
else
{
output = new T1();
var errorData = GlobalNonSuccessResponseHandler.Handle(apiResponse);
output.Succeeded = false;
output.Messages.Add(errorData);
}
return output;
}
}

public static HttpClient AcceptJson(this HttpClient client)
{
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return client;
}

public static HttpClient Acceptgzip(this HttpClient client)
{
// Commenting this out fixes the issue.
//client.DefaultRequestHeaders.AcceptEncoding.Add(StringWithQualityHeaderValue.Parse("gzip"));
client.DefaultRequestHeaders.AcceptEncoding.Add(StringWithQualityHeaderValue.Parse("deflate"));
return client;
}

public static HttpClient AddAuthToken(this HttpClient client, string authToken)
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authToken);
return client;
}

我对发生的事情有点困惑。

所以我有 2 个应用程序,从现在开始我们将其称为客户端和服务器。

客户端使用上面的代码与服务器通信。

在本地,这在 azure 上没问题,但在升级之前一切都正常。

因此,我在本地设置客户端以与 Azure 上的服务器通信,我能够复制该问题。

我查看了 fiddler 中的响应,它能够正确解码它。

如果有人知道我应该在哪里查看并且在任何信息之前已经看过它,那就太好了:D。

更新1

因此,经过更多挖掘后,我决定删除 gzip,然后一切就开始工作了。

client.DefaultRequestHeaders.AcceptEncoding.Add(StringWithQualityHeaderValue.Parse("gzip"));

谁能解释一下吗?

最佳答案

8B 可以是多字节 UTF8 字符的第二个字节。 DecoderFallbackException 告诉您正在将数据解释为其他编码。可能是 Latin-1 doesn’t have 8B字符。

在 fiddler 中,您应该查看响应中的 content-type HTTP header 。如果显示 application/jsonapplication/json; charset=utf-8,这可能是 .NET 中的一个错误,因为即使没有 charset=utf-8 RFC 4627 也表示默认编码已经是 UTF-8。

如果它说其他内容,我会尝试更改服务器,以便它在响应中发送正确的内容类型 header 。

关于azure - Dotnet Core 2.0.3 迁移 |编码无法转换字节 [8B],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47625708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com