.NET 8 升级错误 GetAsync System.FormatException:输入字符串的格式不正确。无法解析偏移量 2 附近。需要 ASCII 数字

问题描述 投票:0回答:1

我刚刚将我们的项目从 .NET 6(工作完美)升级到 .NET 8。当使用

HttpClient
(
System.Net.Http
) 发送请求时遇到间歇性问题,并出现以下错误:

System.FormatException:输入字符串的格式不正确。无法解析偏移量 2 附近。需要 ASCII 数字。

在 System.Text.StringBuilder.AppendFormatHelper(IFormatProvider 提供程序,字符串格式,ReadOnlySpan

GetAsync/PostAsync/SendAsync

1..ctor(计量表,字符串名称,字符串单位,字符串描述,IEnumerable

1 args)   at System.Text.StringBuilder.AppendFormat(String format, Object[] args)   at Prometheus.MeterAdapter.TranslateInstrumentDescriptionToPrometheusHelp(Instrument instrument)   at Prometheus.MeterAdapter.OnInstrumentPublished(Instrument instrument, MeterListener listener)   at System.Diagnostics.Metrics.Instrument.Publish()    at System.Diagnostics.Metrics.UpDownCounter
1.b__0()
)
在 System.Diagnostics.Metrics.Meter.GetOrCreateInstrument[T
](类型instrumentType,字符串名称,字符串单位,字符串描述,IEnumerable
1 tags) > at System.Diagnostics.Metrics.Meter.<>c__DisplayClass37_0
1instrumentCreator)
在System.Net.Http.Metrics.MetricsHandler..ctor(HttpMessageHandler innerHandler,IMeterFactorymeterFactory,Meter&meter)
在 System.Net.Http.SocketsHttpHandler.SetupHandlerChain()
在System.Net.Http.SocketsHttpHandler.SendAsync(HttpRequestMessage请求,CancellationToken取消令牌)
在 Microsoft.Extensions.Http.Logging.LoggingHttpMessageHandler.g__Core|5_0(HttpRequestMessage 请求,布尔 useAsync,CancellationToken CancellationToken)
在 Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.g__Core|5_0(HttpRequestMessage 请求,布尔 useAsync,CancellationToken CancellationToken)
在System.Net.Http.HttpClient.g__Core | 83_0(HttpRequestMessage请求,HttpCompletionOption完成选项,CancellationTokenSource cts,布尔disposeCts,CancellationTokenSource挂起RequestsCts,CancellationToken原始CancellationToken)
在 /app/src/Users/contact.cs 中的 MyService.GetUsers(Guid clientid) 处:行 ##

代码:

1 tags, Func

我还有另一行使用 
var url = $"{BaseUrl}/user?contact=12"; // Error happens on this line var responseData = await _client.GetAsync(url);

的代码,并且我在该调用中也遇到了间歇性错误:

PostAsync

从日志来看,请求根本没有发出去。我做错了什么?

有人遇到过这个问题吗?有人愿意帮忙吗?非常感谢。

我也尝试过使用

var url = $"{BaseUrl}/users/search"; var request = new UserSearchRequest { Username = username, FamilyId = familyid, RelationId = relationid, }; var requestBody = new StringContent(JsonConvert.SerializeObject(request, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }), Encoding.UTF8, "application/json"); // error happens on this line too var responseData = await _client.PostAsync(url, requestBody);

,但它同样间歇性地出现该错误。我也交叉检查了 .NET 8 的所有包更新,但如果我错了,请纠正我,这个

SendAsync
库实际上是 .NET 8 附带的。
我期待 

System.Net.Http

/

GetAsync
/
SendAsync
按照之前已投入生产的 .NET 6 发送没有错误的请求。
    

c# asp.net-core httpclient upgrade .net-8.0
1个回答
0
投票

解决方案是将所有类库和 API 上的 Nugget 包更新到 8.2.1 版本。

PostAsync

	
© www.soinside.com 2019 - 2024. All rights reserved.