我正在为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
如果网站出现故障,我想给用户一个错误,任何想法? 问候。
答案 0 :(得分: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
和HttpWebResponse
,它只是想知道URL是否良好)。
请记住,抛出异常是函数的完全可接受的退出路径。它不会总是必须返回一个值。异常是指示错误情况的适当方式。但是,您当前的实现会“吞下”异常并且不会向消费代码提供任何出错的指示。相反,它返回String.Empty
的“神奇值”,消耗代码可能会或可能不会忽略。
答案 1 :(得分:0)
更改您的异常处理程序。执行此操作的正确方法是尝试请求并在失败时处理异常。