3 回答
TA贡献1799条经验 获得超9个赞
最典型的方法是创建一个自定义工厂:
public class UntrustedCertClientFactory : DefaultHttpClientFactory
{
public override HttpMessageHandler CreateMessageHandler() {
return new HttpClientHandler {
ServerCertificateCustomValidationCallback = (_, _, _, _) => true
};
}
}
然后在你的应用启动中注册它:
FlurlHttp.ConfigureClient("https://theapi.com", cli =>
cli.Settings.HttpClientFactory = new UntrustedCertClientFactory());
FlurlHttpClient默认为每个主机重用相同的实例,因此配置这种方式意味着每次调用都theapi.com将允许使用不受信任的证书。HttpClient与将 an 传递给构造函数相比,它的优势FlurlClient在于它使此配置“偏向一边”,并且在您以更典型/更简洁的方式使用 Flurl 时工作:
await "https://theapi.com/endpoint".GetJsonAsync();
TA贡献1877条经验 获得超6个赞
这是我对 Flurl 的设置,它适用于不受信任的证书:
HttpClientHandler httpClientHandler = new HttpClientHandler();
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain,
errors) => true;
HttpClient httpClient = new HttpClient(httpClientHandler);
httpClient.BaseAddress = new Uri("https://myaddress.com");
var flurlClient = new FlurlClient(httpClient);
var apiInfo = await flurlClient.Request("apiInfo").GetJsonAsync<ApiInfoDto>();
我创建了自定义 HttpClientHandler,它接受ServerCertificateCustomValidationCallback. 当然,您可以在此处理程序中使用其他逻辑。
更新: 使用此设置,您不能对 URL 使用 Flurl 扩展(您不能编写"http://myadress.com/apiInfo".GetJsonAsync<ApiInfoDto>()。您必须如上所示创建 Flurl 客户端并使用 Flurl 客户端进行调用,如我的代码中所示。用法与 Flurl 扩展相同网址。
TA贡献1828条经验 获得超6个赞
接受任何证书的内联解决方案是:
var myString = await "https://some-server-with-an-invalid-cert.net"
.AppendPathSegment("/some-file.txt")
.WithClient(new FlurlClient(new HttpClient(new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (message, cert, chain,
errors) => true
})))
.GetStringAsync();
您可以传递与WithClient()默认客户端不同的客户端配置。在某些情况下,您不想更改默认客户端,而是应用属性,例如仅针对此特定情况的证书验证。
- 3 回答
- 0 关注
- 489 浏览
添加回答
举报