C# 证书无效或错误导致POST请求失败

C# 证书无效或错误导致POST请求失败,c#,exception,uwp,certificate,C#,Exception,Uwp,Certificate,我试图在一个UWP C#应用程序中基于的POST请求。 我的示例代码是: string scriptname = "myscript.php"; var content = new FormUrlEncodedContent(values); //Exception Line (103): var response = await client.PostAsync("https://myserver.ddns.net/" + scriptname, content); var responseS

我试图在一个UWP C#应用程序中基于的POST请求。 我的示例代码是:

string scriptname = "myscript.php";
var content = new FormUrlEncodedContent(values);
//Exception Line (103):
var response = await client.PostAsync("https://myserver.ddns.net/" + scriptname, content);
var responseString = await response.Content.ReadAsStringAsync();
string SJson = responseString.ToString();
messagedialog.Content = SJson;
异常日志:

System.Net.Http.HttpRequestException
HResult=0x80072F0D
Message=发送请求时出错。
Source=System.Net.Http
堆栈跟踪: 在System.Net.Http.HttpClientHandler.d_u86.MoveNext()上 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中 在System.Net.Http.HttpClient.d_u58.MoveNext()上 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中 在System.Runtime.CompilerServices.TaskWaiter1.GetResult()中 在d:\Onedrive\myproject\myproject\App\App\MainPage.xaml.cs中的Aplikacija_iFE.MainPage.d__10.MoveNext()中:第103行

内部异常1: COMException:找不到与此错误代码关联的文本

我的孩子们在纳帕čččččččččččč
粗体字符串是我的母语,告诉我CA无效或错误(基本上是,因为我自己签名)。是否可以使用某些C#代码暂时修复此错误,或者我必须替换证书? 我的HTTPS(Apache)服务器位于Debian 9机器上。
编辑(晚上10:20):工作代码
下面的代码目前还可以使用,但是它非常丑陋,非常不安全,对于我这个刚开始编程的学生来说,这只是一个小问题:|

    string scriptname = "MyRestAPI.php";
                    HttpFormUrlEncodedContent content = new HttpFormUrlEncodedContent(values);
                    HttpResponseMessage response = new HttpResponseMessage();
                    try
                    {
                        client = new HttpClient();
                        response = await client.PostAsync(new Uri("https://myserver.ddns.net/" + scriptname), content);
                    }
                    catch (Exception e)
                    {
                        HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
                        ChainValidationResult[] results = new ChainValidationResult []
                        {
                            ChainValidationResult.Untrusted,                   ChainValidationResult.WrongUsage,
                            ChainValidationResult.BasicConstraintsError,      ChainValidationResult.Expired,
                          ChainValidationResult.IncompleteChain,       ChainValidationResult.InvalidCertificateAuthorityPolicy,
                            ChainValidationResult.InvalidName,                  ChainValidationResult.OtherErrors,
                            ChainValidationResult.RevocationFailure,            ChainValidationResult.RevocationInformationMissing,
                            ChainValidationResult.Revoked,                      ChainValidationResult.UnknownCriticalExtension
                        };

                        for(int i=0;i<results.Length;i++)
                        {
                                                     try
                            {
                     filter.IgnorableServerCertificateErrors.Add(results[i]);
                                client = new HttpClient(filter);
                                response = await client.PostAsync(new Uri("https://myserver.ddns.net/" + scriptname), content);
                            }

                            catch
                            {
                                continue;
                            }
                        }
                        client = new HttpClient(filter);
                        response = await client.PostAsync(new Uri("https://myserver.ddns.net/" + scriptname), content);
                    }
                    finally
                    {
                        client.Dispose();
                    }                          
                    messagedialog.Content = response.Content.ToString();
string scriptname=“MyRestAPI.php”;
HttpFormUrlEncodedContent内容=新的HttpFormUrlEncodedContent(值);
HttpResponseMessage response=新的HttpResponseMessage();
尝试
{
client=新的HttpClient();
response=wait client.PostAsync(新Uri(“https://myserver.ddns.net/“+脚本名),内容);
}
捕获(例外e)
{
HttpBaseProtocolFilter=新的HttpBaseProtocolFilter();
ChainValidationResult[]结果=新的ChainValidationResult[]
{
ChainValidationResult.Untrusted,ChainValidationResult.ErrorUsage,
ChainValidationResult.BasicConstraintError,ChainValidationResult.Expired,
ChainValidationResult.UncompleteChain,ChainValidationResult.InvalidCertificateAuthorityPolicy,
ChainValidationResult.InvalidName、ChainValidationResult.OtherErrors、,
ChainValidationResult.RevocationFailure,ChainValidationResult.RevocationFormationMissing,
ChainValidationResult.Reversed,ChainValidationResult.UnknownCriticalExtension
};

对于(int i=0;i您可以在开发环境中使用配置忽略此错误,或使您的客户端信任证书,即只需将证书添加到您客户端上的受信任根目录中。

您上面显示的URL是否准确或是否应该是HTTPS URL?抱歉,URL中应该有HTTPS。感谢link@Dirk,但我认为我的服务器是Debian 9上的Apache服务器。@S4NNY1服务器一点都不重要。您可以使用上面注释中链接的代码忽略客户端中的证书验证错误。我强烈建议您仅在测试时这样做,这是验证证书的原因之一。但在UWP中没有
ServicePointManager.ServerCertificateValidationCallback=delegate{return true;};
我可以使用所述的IgnorableServerCertificateErrors,但Windows.Web.Http也会与上面代码的基本功能所需的System.Net.Http发生冲突,因为Windows.Web不包含某些函数/方法。