【发布时间】:2022-10-02 13:31:31
【问题描述】:
使用以下代码可以正常编译,但会收到下面的运行时错误。似乎是使用IHttpClientFactory时只支持HttpResponseMessage的策略之间的冲突?
最终目标是能够使用多种策略,如重试、超时等,如果一切正常,则使用缓存策略缓存结果......
无法转换类型的对象 \'Polly.Caching.AsyncCachePolicy\'1[System.String]\' 输入 \'Polly.IAsyncPolicy\'1[System.Net.Http.HttpResponseMessage]\'.\'
serviceCollection.AddStackExchangeRedisCache(options => { options.Configuration = \"...\"; }); IPolicyRegistry<string> registry = serviceCollection.AddPolicyRegistry(); var cacheProvider = ServiceProvider.GetRequiredService<IDistributedCache>().AsAsyncCacheProvider<string>(); serviceCollection.AddSingleton(serviceProvider => cacheProvider); AsyncCachePolicy<string> cachePolicy = Policy.CacheAsync( cacheProvider: cacheProvider, TimeSpan.FromSeconds(30)); registry.Add(\"CachingPolicy\", cachePolicy); serviceCollection.AddHttpClient<IMyClient, MyClient>() .AddPolicyHandlerFromRegistry(this.PolicySelector) private IAsyncPolicy<HttpResponseMessage> PolicySelector(IReadOnlyPolicyRegistry<string> policyRegistry, HttpRequestMessage httpRequestMessage) { return policyRegistry.Get<IAsyncPolicy<HttpResponseMessage>>(\"CachingPolicy\"); }
-
您将策略缓存为 AsyncCachePolicy<string> 类型,然后尝试将其解析为 AsyncCachePolicy<HttpResponseMessage> 类型。不确定您要达到什么目的,但这就是错误。
标签: c# caching .net-6.0 polly retry-logic