HttpContext.Current.Request.UserHostName пуст при вызове из класса - PullRequest
1 голос
/ 16 апреля 2010

У меня есть различные веб-страницы, которым нужно создать URL-адрес для отображения или размещения его в отправленном электронном сообщении. Унаследованный мной код имел это значение для имени веб-сервера в Public Const в Public Class с именем FixedConstants. Например:

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 ]

2 голосов
/ 16 апреля 2010

Я не работаю с VB.NET, но если ваш класс скомпилирован в другую библиотеку, вы можете получить доступ к текущей странице через (C #):

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

И это должно сработать. Я использую аналогичный метод динамического добавления валидаторов для отображения сообщений пользователям.

0 голосов
/ 16 апреля 2010

В качестве отправной точки вы можете проверить, является ли HttpContext.Current значением null или нет.

Если это значение равно нулю, вы получите тот же результат, что и при вызове HttpContext.Current.Request.ServerVariables("REMOTE_HOST") (из-за попытки / улова)

...