Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET | HttpWebRequest,如何查看主机是否在线?_Vb.net_Httpwebrequest_Httpwebresponse_Whitelist - Fatal编程技术网

VB.NET | HttpWebRequest,如何查看主机是否在线?

VB.NET | HttpWebRequest,如何查看主机是否在线?,vb.net,httpwebrequest,httpwebresponse,whitelist,Vb.net,Httpwebrequest,Httpwebresponse,Whitelist,我正在用VB.NET为我的应用程序编写一个白名单。 我使用的是HttpWebRequest方法和HttpWebResponse 如果白名单主机关闭,白名单将被绕过,任何存在漏洞的人都可以使用该程序 Public Function GetWhitelist(ByVal PageURL As String) As String Dim S As String = "" Try Dim Request As HttpWebRequest = We

我正在用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
我想给用户一个错误,如果网站关闭,有什么想法吗?
问候。

更改您的异常处理程序。正确的方法是尝试请求并在异常失败时处理异常。

您的错误情况是什么?仅此函数无法防止发生异常时发生任何事情。函数仍然会返回一个字符串而退出。因此,任何消费代码都必须查找错误条件并相应地处理它们

如果请求失败,您应该有意义地处理异常。我脑海中浮现的两个想法包括:

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是否正确)


请记住,引发异常是函数完全可以接受的退出路径。它并不总是必须返回值。异常是指示错误条件的适当方式。但是,您当前的实现“吞咽”异常,不向消费代码提供任何出错的指示。相反,它返回一个
字符串的“魔法值”。空
消费代码可以忽略或不忽略哪个。

Joel,谢谢你的回答,当你说要尝试请求时,你这到底是什么意思?谢谢。