HttpContext.Current.Request.UserHostName пуст при вызове из класса

У меня есть различные веб-страницы, которым необходимо создать URL-адрес для отображения или размещения его в отправленном сообщении электронной почты. Код, который я унаследовал, имел это значение для имени веб-сервера в общедоступной константе в общедоступном классе с именем 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)?


person John Adams    schedule 15.04.2010    source источник


Ответы (2)


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

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

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

person Jim Schubert    schedule 15.04.2010

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

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

person Paul Lucas    schedule 15.04.2010