2010-04-15 46 views
1

我有各種網頁需要建立一個URL來顯示或放置在發出的電子郵件中。我繼承的代碼具有名爲FixedConstants的公共類中的Public Const中的Web服務器名稱的值。例如:從類中調用時HttpContext.Current.Request.UserHostName爲空

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

我不VB.NET工作,但如果你的類被編譯成另一種庫,您可以通過(C#)訪問當前頁面:

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

而且應該有效。我使用類似的方法來動態添加驗證器以向用戶顯示消息。

0

作爲一個起點,您可能需要檢查HttpContext.Current是否爲null

如果這是空,你會如果你調用HttpContext.Current.Request.ServerVariables("REMOTE_HOST")(因爲你的try/catch的),得到同樣的結果