エラー状態は何ですか? この関数だけでは、例外が発生した場合に何も防止できません。関数は文字列を返して終了します。そのため、消費するコードはエラー条件を探し、それに応じて処理する必要があります。
リクエストが失敗した場合は、意味のある例外を処理する必要があります。私の頭の上にある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
) が提供され、外部のコードから実装の詳細を隠すための一歩が踏み出されます。このオブジェクトの (このコードは実際にはHttpWebRequest
and を気にしないためHttpWebResponse
、URL が適切かどうかを知りたいだけです)。
例外のスローは、関数の終了パスとして完全に受け入れられることを覚えておいてください。常に値を返す必要はありません。例外は、エラー状態を示す適切な方法です。ただし、現在の実装は例外を「飲み込み」、問題が発生したことを消費するコードに示しません。String.Empty
代わりに、消費するコードが無視する場合と無視しない場合がある「魔法の値」を返します。