使用服务要求证书访问控制台应用程序中的服务

本文关键字:服务 控制台 应用程序 访问控制 证书 访问 | 更新日期: 2023-09-27 18:09:26

我正试图从下面的服务请求url读取数据。当我在浏览器中打开它时,我可以看到数据,但是当我想使用ConsoleApplication做同样的事情时,它不起作用。

https://wb01.miracast.com/Primary/services/requestlist/getrequestlist?id=80FC46F4& queryby = requestid& format = xml

我注意到的一件事是它要求我选择证书,当我选择证书(在这种情况下,它是sr.dns.miracast.com(it Machine Auth CA 2))时,它返回数据并显示在浏览器中。我有这个证书安装在个人,TrustedRootAuthority在我的桌面从我我的代码也运行在Visual Studio。

现在我如何使用c#控制台应用程序代码实现相同的。我的意思是我如何为代码指定证书?

我尝试了下面的操作,但它抛出了未发现的错误,在休息捕获块

   private void Button_Click(object sender, RoutedEventArgs e)
    {
        // retrieve an avatar image from the Web
        string avatarUri = "https://wb01.miracast.com/Primary/services/requestlist/getrequestlist?id=80FC46F4&queryby=requestid&format=xml";
        HttpWebRequest request =
            (HttpWebRequest)HttpWebRequest.Create(avatarUri);
        request.BeginGetResponse(GetAvatarImageCallback, request);
    }
    private void GetAvatarImageCallback(IAsyncResult result)
    {
        HttpWebRequest request = result.AsyncState as HttpWebRequest;
        if (request != null)
        {
            try
            {
                WebResponse response = request.EndGetResponse(result);
                //avatarImg = Texture2D.FromStream(
                //    graphics.GraphicsDevice,
                //    response.GetResponseStream());
            }
            catch (WebException e)
            {
               // gamerTag = "Gamertag not found.";
                return;
            }
        }
    }

使用服务要求证书访问控制台应用程序中的服务

通过代码附加相同的证书后,它工作了。

        string avatarUri = "https://wb01.miracast.com/Primary/services/requestlist/getrequestlist?id=80FC46F4&queryby=requestid&format=xml";
        HttpWebRequest request =
            (HttpWebRequest)HttpWebRequest.Create(avatarUri);
        request.Method = "GET";        // Post method

        X509Certificate cert = X509Certificate.CreateFromCertFile(@"C:'Users'kim'Desktop'oas-test.cer");
        request.ClientCertificates.Add(cert);
        // Attaching the Certificate To the request
        System.Net.ServicePointManager.CertificatePolicy =
                               new TrustAllCertificatePolicy();
        request.UseDefaultCredentials = true;
        request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
        HttpWebResponse wResp = (HttpWebResponse)request.GetResponse();
        Encoding enc = System.Text.Encoding.GetEncoding(1252);
        StreamReader loResponseStream = new
          StreamReader(wResp.GetResponseStream(), enc);
        string Response = loResponseStream.ReadToEnd();
        loResponseStream.Close();
        wResp.Close();