从类调用时,HttpContext.Current.Request.UserHostName为空

时间:2010-04-15 21:57:07

标签: asp.net request httpcontext

我有各种网页需要建立一个URL来显示或将其放在发出的电子邮件中。我继承的代码在公共类中名为FixedConstants的Public Const中具有此Web服务器名称的值。例如:

Public Const cdServerName As String = "WEBSERVERNAME"

为了改善这一点,我写道:

Public Class UIFunction
Public Shared myhttpcontext As HttpContext
Public Shared Function cdWebServer() As String
    Dim s As New StringBuilder("http://")
    Dim h As String
    h = String.Empty
    Try
        h = Current.Request.ServerVariables("REMOTE_HOST").ToString()
    Catch ex As Exception
        Dim m As String
        m = ex.Message.ToString()   'Ignore this should-not-occur thingy
    End Try
    If h = String.Empty Then
        h = "SomeWebServer"
    End If
    s.Append(h)
    s.Append("/")
    Return s.ToString()
End Function

我在HttpContext.Current.Request.UserHostName之类的调试时尝试了不同的东西,我总是得到一个空字符串,它抽出我的默认字符串“SomeWebServer”。

我知道Request.UserHostName或Request.ServerVariables(“REMOTE_HOST”)在从页面调用时有效,但是当从类文件的被调用方法(即UIFunction.vb)调用时,为什么返回空?

2 个答案:

答案 0 :(得分:2)

我不使用VB.NET,但是如果你的类编译成另一个库,你可以通过(C#)访问当前页面:

Page currentPage = System.Web.HttpContext.Current.Handler as Page;
string hostName = currentPage.Request.UserHostName;

这应该有效。我使用类似的方法动态添加验证器以向用户显示消息。

答案 1 :(得分:0)

作为起点,您可能需要检查HttpContext.Current是否为null

如果这是null,您将获得与调用HttpContext.Current.Request.ServerVariables("REMOTE_HOST")(因为您的try / catch)相同的结果