C# 在C中建立ssl连接时,如何检查无效凭据#
我有一个方法,它试图捕获一个异常,当通过SSL连接时,如果提供了无效的凭据,可能会引发该异常。凭据通过SNMP提供。但我并不总是能够将异常解释为无效凭据,因为您可以看到,我只是试图读取抛出异常的消息,该消息因设备而异 我做的对吗?是否有任何简单的方法来检查建立连接所需的凭据是否有效?当抛出的异常消息从一个设备到另一个设备发生变化时,我在这里完全不知所措 谢谢你的指点C# 在C中建立ssl连接时,如何检查无效凭据#,c#,.net,ssl,authorization,snmp,C#,.net,Ssl,Authorization,Snmp,我有一个方法,它试图捕获一个异常,当通过SSL连接时,如果提供了无效的凭据,可能会引发该异常。凭据通过SNMP提供。但我并不总是能够将异常解释为无效凭据,因为您可以看到,我只是试图读取抛出异常的消息,该消息因设备而异 我做的对吗?是否有任何简单的方法来检查建立连接所需的凭据是否有效?当抛出的异常消息从一个设备到另一个设备发生变化时,我在这里完全不知所措 谢谢你的指点 try { string ipSSL = string.Format(URL_CWIS_HELPSTRING, "s",
try
{
string ipSSL = string.Format(URL_CWIS_HELPSTRING, "s", SecurityBindingProxy.Destination.Address.Value.Host, "/");
System.Net.WebRequest https = System.Net.HttpWebRequest.Create(ipSSL);
System.Net.ServicePointManager.ServerCertificateValidationCallback = WsdlClient.ServiceRequirements.WsdlServiceRequirements.SSLCheckCallback;
https.Credentials = new System.Net.NetworkCredential(SNMP.ConnectionInfo.Instance.Username, SNMP.ConnectionInfo.Instance.Password); ;
System.Net.HttpWebResponse responseSSL = (System.Net.HttpWebResponse)https.GetResponse();
responseSSL.Close();
}
catch (Exception ex)
{
if (ex.Message.Contains("Unauthorized")
|| ex.Message.Contains("401"))
{
return -2;
}
}
您希望捕获更特定类型的异常,而不是解析异常消息。如果您查看文档,您将看到有文档记录的抛出的异常类型。如果捕获到
WebException
,则无需手动解析字符串即可找到HTTP状态,例如:
catch (System.Net.WebException ex)
{
var errorResponse = (System.Net.HttpWebResponse)ex.Response;
if (errorResponse.StatusCode == System.Net.HttpStatusCode.Unauthorized)
{
//...
}
}
你为什么不捕获异常类型而不检查消息是否包含“Unauthorized”?@Ramhound:因为,我不知道要捕获哪种特定类型的异常。此外,这些异常还包含错误消息,这些消息有时表示http 401,有时表示404,并且没有合适的.net异常类。这正是我的问题。谢谢,但我需要知道如何捕获与无效凭据相关的异常。指示用户无权查看内容的响应代码是否表示凭据有问题?@Duncan Smart:哇!非常感谢你教我一些新东西,我现在可以让我的代码更优雅了。但是,我试图通过SNMP连接到许多设备,所有这些设备似乎都会抛出各种各样的HttpWebResponse来查找无效凭据。我刚才试过你的建议,但没有多大帮助。我认为你应该做一些调查,并记录你从这些设备中获得的状态码。@DuncanSmart:到目前为止,我只是在做这件事。我在想是否还有其他优雅的方法。我会接受你的解决方案,因为我学到了一些新东西。谢谢。