我目前正在开发中使用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()
*******************************************************************************
答案 0 :(得分:0)
问题是域 https://chlevinatier.agiir-portail.com/ 不使用有效的SSL / TLS证书,因此请求不起作用,因为与具有不受信任证书的服务器连接不是安全(在大多数情况下)。
解决方案:
HttpClient
的解决方案,但我找不到它。 这是正确的方法。我希望这可以帮到你。