我有各种网页需要建立一个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)调用时,为什么返回空?
答案 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)相同的结果