我有这个方法试图捕获在通过SSL连接时提供无效凭据时可能抛出的异常。凭据通过SNMP提供。但我并不总是能够将异常解释为无效凭据,因为您可以看到我只是尝试读取抛出的异常消息,该消息因设备而异。
我在做什么是正确的?是否有任何万无一失的方法来检查连接所需的凭据是否有效?随着异常消息从设备变为设备,我完全迷失在这里。
感谢您的任何指示。
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;
}
}
答案 0 :(得分:2)
您希望捕获更具体的异常类型,而不是解析异常消息。如果您查看GetResponse的文档,您会看到记录的异常类型。如果您捕获WebException
,那么这将允许您在不解析字符串的情况下找到HTTP状态,例如:
catch (System.Net.WebException ex)
{
var errorResponse = (System.Net.HttpWebResponse)ex.Response;
if (errorResponse.StatusCode == System.Net.HttpStatusCode.Unauthorized)
{
//...
}
}