3 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
最典型的方法是創(chuàng)建一個(gè)自定義工廠:
public class UntrustedCertClientFactory : DefaultHttpClientFactory
{
public override HttpMessageHandler CreateMessageHandler() {
return new HttpClientHandler {
ServerCertificateCustomValidationCallback = (_, _, _, _) => true
};
}
}
然后在你的應(yīng)用啟動(dòng)中注冊(cè)它:
FlurlHttp.ConfigureClient("https://theapi.com", cli =>
cli.Settings.HttpClientFactory = new UntrustedCertClientFactory());
FlurlHttpClient默認(rèn)為每個(gè)主機(jī)重用相同的實(shí)例,因此配置這種方式意味著每次調(diào)用都theapi.com將允許使用不受信任的證書。HttpClient與將 an 傳遞給構(gòu)造函數(shù)相比,它的優(yōu)勢(shì)FlurlClient在于它使此配置“偏向一邊”,并且在您以更典型/更簡(jiǎn)潔的方式使用 Flurl 時(shí)工作:
await "https://theapi.com/endpoint".GetJsonAsync();

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
這是我對(duì) Flurl 的設(shè)置,它適用于不受信任的證書:
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>();
我創(chuàng)建了自定義 HttpClientHandler,它接受ServerCertificateCustomValidationCallback. 當(dāng)然,您可以在此處理程序中使用其他邏輯。
更新: 使用此設(shè)置,您不能對(duì) URL 使用 Flurl 擴(kuò)展(您不能編寫"http://myadress.com/apiInfo".GetJsonAsync<ApiInfoDto>()。您必須如上所示創(chuàng)建 Flurl 客戶端并使用 Flurl 客戶端進(jìn)行調(diào)用,如我的代碼中所示。用法與 Flurl 擴(kuò)展相同網(wǎng)址。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
接受任何證書的內(nèi)聯(lián)解決方案是:
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()默認(rèn)客戶端不同的客戶端配置。在某些情況下,您不想更改默認(rèn)客戶端,而是應(yīng)用屬性,例如僅針對(duì)此特定情況的證書驗(yàn)證。
- 3 回答
- 0 關(guān)注
- 637 瀏覽
添加回答
舉報(bào)