我刚刚从ubuntu软件中心安装了monodevelop并创建了一个解决方案。我正在尝试做WebRequest.create(url)。但是它不断抛出“身份验证或解密失败”。我究竟做错了什么?如果我没有做错任何事情,应该怎么做才能完成以上工作!
我已经搜索过此内容,但无法提出解决问题的解决方案!
这是我的工作...
public static string AccessURL(string url, string postcontent)
{
WebRequest request = WebRequest.Create(url);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postcontent);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return responseFromServer;
}
提前致谢!
最佳答案
该错误表明您正在尝试访问SSL / TLS加密资源。默认情况下,Mono不信任任何这些站点,并且由开发人员确定是否要访问该资源。 mono's security FAQ中有关此内容的更多信息。
因此,执行此操作的一种方法是在您的类中实现ServerCertificateValidationCallback:
using System.IO;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
public class MyAwesomeProgram
{
public MyAwesomeProgram()
{
ServicePointManager.ServerCertificateValidationCallback =
ValidateServerCertficate;
}
private static bool ValidateServerCertficate(object sender, X509Certificate certificate,
X509Chain chain, SslPolicyErrors sslpolicyerrors)
{
//This is where you should validate the remote certificate
return true;
}
public void FetchAwesomeStuff (string url)
{
var wr = WebRequest.Create (url);
var stream = wr.GetResponse().GetResponseStream ();
Console.WriteLine (new StreamReader (stream).ReadToEnd ());
}
}
mono documentation about using Certificate Policies and Trusting Roots中有更多示例。请注意,上面的示例忽略了安全性,并接受所有证书,即使您可能不信任那些证书。不建议使用!