1

送信された電子メールメッセージに表示または配置するためにURLを作成する必要があるさまざまなWebページがあります。私が継承したコードは、FixedConstantsと呼ばれるパブリッククラスのパブリック定数の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)の呼び出されたメソッドから呼び出されたときにこれが空を返すのはなぜですか?

4

2 に答える 2

2

私は VB.NET を使用していませんが、クラスが別のライブラリにコンパイルされている場合は、(C#) 経由で現在のページにアクセスできます。

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

そして、それはうまくいくはずです。ユーザーにメッセージを表示するためにバリデーターを動的に追加する同様の方法を使用します。

于 2010-04-15T22:07:40.580 に答える
0

HttpContext.Current出発点として、そうであるかどうかを確認することをお勧めしますnull

これが null の場合、呼び出した場合と同じ結果が得られますHttpContext.Current.Request.ServerVariables("REMOTE_HOST")(try/catch のため)。

于 2010-04-15T22:05:50.803 に答える