使用服务要求证书访问控制台应用程序中的服务
本文关键字:服务 控制台 应用程序 访问控制 证书 访问 | 更新日期: 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();