【解決方法】C#でcer証明書を使用してhttpwebrequest経由で応答を取得する方法は?


C# で cer 証明書を使用して HTTPwebRequest 経由で応答をフェッチしたい。 拡張子が .cer の証明書を信頼されたルート証明書ストアにインポートしました。 GetResponse メソッドで応答を取得しているときに、応答が null になっています

私が試したこと:

私のコードは以下の通りです:

C#
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
               | SecurityProtocolType.Tls11
               | SecurityProtocolType.Tls12
               | SecurityProtocolType.Ssl3;


                ServicePointManager.Expect100Continue = true;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(txtRequestURL.Text);
                System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
                request.Method = "POST";
                request.Accept = @"application/json";
                request.ContentType = @"application/json";
                Byte[] byteArray = encoding.GetBytes(txtReq.Text);
                request.ContentLength = byteArray.Length;
                if (chkRequestHeader.Checked)
                {

                    request.Headers.Add("X-API-KEY", txtXAPIKey.Text);
                }
               
               

                //request.Timeout = 1000 * Convert.ToInt32(txtResponseTimeOut.Text);

                  string certificatePath = @"D:\Cert.cer";
                   
                  request.ClientCertificates.Add(new X509Certificate(certificatePath));

                 txtLog.Text += "btnInvoke_Click()-Adding Certificates Process Completed with Certificate path:"+certificatePath + Environment.NewLine;
               

               using (Stream stm = request.GetRequestStream())

                {
                    
                    stm.Write(byteArray, 0, byteArray.Length);
                    
                }


                try
                {
                   
                    HttpWebResponse httpWebRes = (HttpWebResponse)request.GetResponse();
                  
                    txtHTTPStatusCode.Text = Convert.ToString(httpWebRes.StatusCode);
                    using (StreamReader responseReader = new StreamReader(httpWebRes.GetResponseStream()))
                    {

                        try
                        {
                           
                            txtResponse.Text = responseReader.ReadToEnd();
                            
                            
                        }
                        catch (Exception ex)
                        {

                            txtLog.Text += "btnInvoke_Click()-Fetching Response from Response Stream Failed with Exception: " + ex.Message
                               + Environment.NewLine + " with Inner Exception:" + ex.InnerException + Environment.NewLine + " at Stack Trace: " + ex.StackTrace + Environment.NewLine;
                        }
                      
                        
                        responseReader.Close();
                       

                    }

解決策 1

私たちはあなたのシステムにアクセスできないため、あなたと同じ条件下であなたのコードを実行することはできません。 しかし… これは私たちが最もよく聞かれる問題の 1 つであり、私たちが最も答えられない問題でもありますが、あなた自身が最も答えられる問題です。

エラーの意味を説明しましょう。変数、プロパティ、またはメソッドの戻り値を使用しようとしましたが、null が含まれています。これは、変数にクラスのインスタンスがないことを意味します。
ポケットのようなものです。シャツにポケットがあり、ペンを入れるのに使用します。 ポケットに手を入れてペンがないことに気づいたら、紙に自分の名前を書くことはできません。 空のポケットはヌル値 (ここにはペンがありません!) を与えているので、ペンを取り出したら通常行うことは何もできません。 なぜそれは空ですか? それが問題です – 今朝家を出るときにペンを手に取るのを忘れたのかもしれませんし、昨夜脱いだときに昨日のシャツのポケットにペンを忘れたのかもしれません.

私たちはそこにいなかったのでわかりません。さらに重要なことに、あなたのシャツも見えず、ましてやポケットに何が入っているかもわかりません!

コンピューターに戻ると、あなたは同じことを何らかの形で行っています。そして、あなたのコードを見ることはできません。
しかし、それは可能です。ここでは、Visual Studio が役に立ちます。 デバッガーでプログラムを実行し、失敗すると、問題が見つかった行が表示されます。 次に、そのさまざまな部分を調べて、どの値が null であるかを確認し、コードを振り返ってその理由を見つけることができます。 したがって、エラー行を含むメソッドの先頭にブレークポイントを置き、プログラムを最初からもう一度実行します。 今回は、デバッガーはエラーが発生する前に停止し、コードをステップ実行して値を確認することで、何が起こっているかを調べることができます。

申し訳ありませんが、私たちはあなたにそれを行うことはできません – 新しい (そして非常に便利な) スキルを学ぶ時が来ました: デバッグ!

コメント

タイトルとURLをコピーしました