Как проверить наличие недействительных учетных данных при создании ssl-соединения в C # - PullRequest
1 голос
/ 06 января 2012

У меня есть этот метод, который пытается перехватить исключение, которое может быть выдано при предоставлении неверных учетных данных при подключении через 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;
    }
}

1 Ответ

2 голосов
/ 06 января 2012

Вы хотите перехватывать более конкретный тип исключения, а не анализировать сообщения об исключениях.Если вы посмотрите документы для GetResponse , то увидите документированные типы исключений.Если вы поймаете WebException, это позволит вам узнать статус HTTP без разбора строк, например:

catch (System.Net.WebException ex)
{
    var errorResponse = (System.Net.HttpWebResponse)ex.Response;
    if (errorResponse.StatusCode == System.Net.HttpStatusCode.Unauthorized)
    {
        //...
    }
}
...