76

HttpWebRequestに証明書を追加するのは非常に簡単です。ただし、WebClientを使用して同等の方法を見つける方法は見つかりませんでした。基本的に、WebClientを使用して特定の証明書を使用してPOSTを送信したいと思います。

WebClientを使用してこの正確なコードをどのように実現しますか?

var request = (HttpWebRequest) WebRequest.Create("my-url");
request.Method = "POST";
request.ClientCertificates.Add(new X509Certificate()); //add cert
4

4 に答える 4

101

1 つ以上の関数をサブクラス化し、オーバーライドする必要があります。

class MyWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri address)
    {
        HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
        request.ClientCertificates.Add(new X509Certificate());
        return request;
    }
}
于 2010-01-14T18:59:26.520 に答える
5

新しい証明書がフロントエンドにインストールされたとき、興味深いことが起こりました。エラーが発生し始めました:

「基になる接続が閉じられました: SSL/TLS セキュア チャネルの信頼関係を確立できませんでした。; 基になる接続が閉じられました: SSL/TLS セキュア チャネルの信頼関係を確立できませんでした。;」

各フロントエンドに移動してブラウザを開くことで、エラーに対処しました。IE が古い証明書をキャッシュしていたようです。ブラウザを開くと、新しい証明書が有効になります。問題が解決しました!

于 2011-09-27T19:48:27.983 に答える
4

をサブクラス化し、独自のプロパティをWebClient追加してメソッドをオーバーライドするだけです。これを VB から C# に変換する時間はありませんが、わかりやすいはずです。ClientCertificatesWebClient.GetWebRequest(System.Uri)

Imports System.Net

Public Class WebClient2
    Inherits System.Net.WebClient

    Private _ClientCertificates As New System.Security.Cryptography.X509Certificates.X509CertificateCollection
    Public ReadOnly Property ClientCertificates() As System.Security.Cryptography.X509Certificates.X509CertificateCollection
        Get
            Return Me._ClientCertificates
        End Get
    End Property
    Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest
        Dim R = MyBase.GetWebRequest(address)
        If TypeOf R Is HttpWebRequest Then
            Dim WR = DirectCast(R, HttpWebRequest)
            If Me._ClientCertificates IsNot Nothing AndAlso Me._ClientCertificates.Count > 0 Then
                WR.ClientCertificates.AddRange(Me._ClientCertificates)
            End If
        End If
        Return R
    End Function
End Class
于 2010-01-14T18:53:34.040 に答える