2012-01-06 5 views
1

このメソッドは、SSLを介して接続するときに無効な資格情報が与えられたときにスローされる可能性のある例外をキャッチしようとします。資格情報はSNMPを通じて提供されます。しかし、私はいつも無効な資格情報として例外を解釈できるわけではありません。私は、デバイスごとに異なる例外のメッセージを読み取ろうとしていることがわかります。C#でSSL接続を確立するときに無効な資格情報を確認するには

私は何を正しくしていますか?接続に必要な資格情報が有効かどうかを確認する完全な方法はありますか?デバイスからデバイスへと変化する例外メッセージが投げられると、私はここで完全に失われてしまいます。

ありがとうございます。

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

メッセージは「未承認」が含まれている場合、なぜあなたの代わりにチェックの例外の型をキャッチされていませんか? –

+0

@Ramhound:私はどの特定のタイプの例外を捕まえるべきかわからないからです。また、これらの例外には、http 401、時には404、適切な.net例外クラスというエラーメッセージが含まれています。これは私の正確な問題です。 –

答えて

2

例外メッセージを解析するのではなく、より具体的な例外をキャッチしたいと考えています。 GetResponseのドキュメントを見ると、スローされた例外の種類が文書化されています。あなたがWebExceptionをキャッチした場合、これはあなたが例えば手動で文字列を解析することなく、HTTPのステータスを見つけることができます。:

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

ありがとうございますが、無効な資格情報に関連する例外をキャッチする方法を知る必要があります。 –

+1

ユーザーがコンテンツを表示する権限を与えられていないことを示す応答コードは、資格情報に問題があることを示していませんか? –

+1

@Duncan Smart:うわー!新しいことを教えてくれてありがとう、私のコードをよりエレガントにすることができます。しかし、私はSNMPを介してデバイスの数に接続しようとしており、これらのデバイスはすべて、無効な資格情報のためにさまざまなHttpWebResponseをスローするようです。私はちょうどあなたの提案を試みましたが、それはあまり役に立たなかった。 –

関連する問題