我刚刚将我们的项目从 .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.b__0()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
) 在 System.Diagnostics.Metrics.Meter.GetOrCreateInstrument[T ](类型instrumentType,字符串名称,字符串单位,字符串描述,IEnumerable1 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 发送没有错误的请求。解决方案是将所有类库和 API 上的 Nugget 包更新到 8.2.1 版本。
PostAsync