1

VB.NET でアプリケーションのホワイトリストをコーディングしています。HttpWebRequest メソッドと HttpWebResponse を使用しています。

ホワイトリスト ホストがダウンしている場合、ホワイトリストはバイパスされ、プログラムは脆弱性である誰でも利用できます。

Public Function GetWhitelist(ByVal PageURL As String) As String
        Dim S As String = ""
        Try
            Dim Request As HttpWebRequest = WebRequest.Create("WHITELIST URL HERE")
            Dim Response As HttpWebResponse = Request.GetResponse()
            Using Reader As StreamReader = New StreamReader(Response.GetResponseStream())
                S = Reader.ReadToEnd
            End Using
        Catch ex As Exception
            Debug.WriteLine("Start Program Error. Handle:0")
        End Try
        Return S
    End Function

ウェブサイトがダウンしている場合にユーザーにエラーを表示したいのですが、アイデアはありますか? よろしく。

4

2 に答える 2

2

エラー状態は何ですか? この関数だけでは、例外が発生した場合に何も防止できません。関数は文字列を返して終了します。そのため、消費するコードはエラー条件を探し、それに応じて処理する必要があります。

リクエストが失敗した場合は、意味のある例外を処理する必要があります。私の頭の上にある2つのアイデアには、次のものが含まれます。

1) 例外がスタックにバブルアップするようにします。

Public Function GetWhitelist(ByVal PageURL As String) As String
    Dim S As String = ""
    Dim Request As HttpWebRequest = WebRequest.Create("WHITELIST URL HERE")
    Dim Response As HttpWebResponse = Request.GetResponse()
    Using Reader As StreamReader = New StreamReader(Response.GetResponseStream())
        S = Reader.ReadToEnd
    End Using
    Return S
End Function

これにより、ホストへの接続が試行され、その試みが失敗した場合、文字列を返す代わりに例外がスローされます。

2) カスタム例外をスローします。

Public Function GetWhitelist(ByVal PageURL As String) As String
    Dim S As String = ""
    Try
        Dim Request As HttpWebRequest = WebRequest.Create("WHITELIST URL HERE")
        Dim Response As HttpWebResponse = Request.GetResponse()
        Using Reader As StreamReader = New StreamReader(Response.GetResponseStream())
            S = Reader.ReadToEnd
        End Using
    Catch ex As Exception
        Debug.WriteLine("Start Program Error. Handle:0")
        Throw New SomeCustomException(String.Format("Unable to contact host: {0}", PageURL), ex)
    End Try
    Return S
End Function

これにより、応答リーダーから出力されるものではなく、より対象を絞った例外が提供され、ログと分析のためのエラーに関する有用な実行時情報 (つまり、の実行時値PageURL) が提供され、外部のコードから実装の詳細を隠すための一歩が踏み出されます。このオブジェクトの (このコードは実際にはHttpWebRequestand を気にしないためHttpWebResponse、URL が適切かどうかを知りたいだけです)。

例外のスローは、関数の終了パスとして完全に受け入れられることを覚えておいてください。常に値を返す必要はありません。例外は、エラー状態を示す適切な方法です。ただし、現在の実装は例外を「飲み込み」、問題が発生したことを消費するコードに示しません。String.Empty代わりに、消費するコードが無視する場合と無視しない場合がある「魔法の値」を返します。

于 2012-12-18T19:23:51.590 に答える
0

例外ハンドラを変更してください。これを行う正しい方法は、リクエストを試行し、失敗した場合は例外を処理することです。

于 2012-12-18T19:18:53.787 に答える