发生一个或多个错误(发送请求时发生错误) - Xamarin.Forms

时间:2017-07-13 09:20:48

标签: c# web-services exception xamarin httpclient

我目前正在开发中使用Xamarin.Forms创建一个应用程序来管理Intranet中的通知。
所以我有一个按钮" Connection"在连接到Web服务的主页面上,首先验证用户的登录名和密码 我的问题是与Web服务的连接始终失败。

我用邮递员测试了网络服务,它没问题;我得到了回复,但是当我在visual studio(UWP或Droid项目)中使用该应用程序时,每次都会出现例外,我不知道为什么。

这是我的代码:

private string WebServiceAuthentication()  
{  
    string url = "https://chlevinatier.agiir-portail.com/api/jsonws/AlertesPortail-portlet.portal/check-authentication";  
    string login = "test";  
    string password = "test";`

    using ( HttpClient client = new HttpClient() )
    {
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Basic", "tjhGjfM1" );

        try
        {
            return client.GetAsync( $"{url}?login={login}&password={password}" ).Result.Content.ReadAsStringAsync().Result;
        }
        catch ( AggregateException ae )
        {
            ae.Handle( ( x ) =>
            {
                if ( x is HttpRequestException )
                {
                    HttpRequestException hre = x as HttpRequestException;
                    Debug.WriteLine( $"Data : {hre.Data}\nHelpLink : {hre.HelpLink}\nHResult : {hre.HResult}\nInnerException : {hre.InnerException}\nMessage : {hre.Message}\nSource : {hre.Source}\nStackTrace : {hre.StackTrace}" );
                }

                return false;
            });

            return string.Empty;
        }
        catch ( Eception e )
        {
            Debug.WriteLine( $"Data : {e.Data}\nHelpLink : {e.HelpLink}\nHResult : {e.HResult}\nInnerException : {e.InnerException}\nMessage : {e.Message}\nSource : {e.Source}\nStackTrace : {e.StackTrace}" );
            return string.Empty;
        }
    }
}  

当我点击按钮" Connection"时,我在visual studio的调试屏幕上得到了这个结果:

*******************************************************************************
>Data : System.Collections.ListDictionaryInternal  
>HelpLink :  
>HResult : -2147012851  
>InnerException : System.Runtime.InteropServices.COMException (0x80072F0D): Le texte associé à ce code d’erreur est introuvable.

>L'autorité de certification n'est pas valide ou correcte

>   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)  
>   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
>   at System.Net.Http.HttpHandlerToFilter.<SendAsync>d__4.MoveNext()  

--- End of stack trace from previous location where exception was thrown ---  

>   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)  
>   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)  
>   at System.Net.Http.HttpClientHandler.<SendAsync>d__86.MoveNext()  

>Message : An error occurred while sending the request. 
>Source : System.Net.Http  
>StackTrace :  
>at System.Net.Http.HttpClientHandler.  <SendAsync>d__86.MoveNext()  

--- End of stack trace from previous location where exception was thrown ---  

>   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)  
>   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)  
>   at System.Net.Http.HttpClient.<FinishSendAsync>d__58.MoveNext()  
*******************************************************************************

1 个答案:

答案 0 :(得分:0)

问题是域 https://chlevinatier.agiir-portail.com/ 不使用有效的SSL / TLS证书,因此请求不起作用,因为与具有不受信任证书的服务器连接不是安全(在大多数情况下)。

解决方案:

  1. 下载证书,将其添加到应用程序并将其导入,例如this answer之后。我一直在寻找HttpClient的解决方案,但我找不到它。 这是正确的方法
  2. 遵循this answer
  3. ,避免验证证书

    我希望这可以帮到你。