2

ドメイン/サブドメイン/ホストに基づいて、global.asax Application_Start イベントで作成されたルーティング テーブルのパスの宛先を調整する最良の方法は何ですか? 以下は IIS6 では機能しましたが、IIS7 では要求オブジェクトが Application_Start イベントから切り離されているため、機能しなくなりました。

Dim strHost As String = Context.Request.Url.Host  
Dim strDir As String = ""  
If strHost.Contains("domain1.com") Then  
    strDir = "area1/"  
Else  
    strDir = "area2/"  
End If  
routes.MapPageRoute("Search", "Search", "~/" & strDir & "search.aspx") 
4

2 に答える 2

4

私は自分の問題を解決したようです。カスタム ルート制約で使用することはできますが、IIS7.0 では Application_Start で Request オブジェクトにアクセスすることはできません。これが私がやった方法です。

カスタム ルート制約を定義します。

Imports System.Web
Imports System.Web.Routing

Public Class ConstraintHost
    Implements IRouteConstraint

    Private _value As String

    Sub New(ByVal value As String)
        _value = value
    End Sub

    Public Function Match(ByVal httpContext As System.Web.HttpContextBase, ByVal route As System.Web.Routing.Route, ByVal parameterName As String, ByVal values As System.Web.Routing.RouteValueDictionary, ByVal routeDirection As System.Web.Routing.RouteDirection) As Boolean Implements System.Web.Routing.IRouteConstraint.Match
        Dim hostURL = httpContext.Request.Url.Host.ToString()
        Return hostURL.IndexOf(_value, StringComparison.OrdinalIgnoreCase) >= 0
    End Function
End Class

次に、ルートを定義します。

routes.MapPageRoute(
    "Search_Area1",
    "Search",
    "~/area1/search.aspx",
    True,
    Nothing,
    New RouteValueDictionary(New With {.ArbitraryParamName = New ConstraintHost("domain1.com")})
)

routes.MapPageRoute(
    "Search_Area2",
    "Search",
    "~/area2/search.aspx")
)

この手法は、サブドメインに基づいて異なるルーティングを適用する場合にも使用できます。

私を正しい方向に向けてくれた Steven Wather のasp.net mvc ルーティングポストに大いに感謝します (Web フォームではなく mvc のためのものでしたが)。

于 2010-05-10T06:11:35.293 に答える
0

これは、代わりに web.config から読み取ることができる設定ですか? <-私のお勧め。

この投稿は役に立ちましたか?

http://mvolo.com/blogs/serverside/archive/2007/11/10/Integrated-mode-Request-is-not-available-in-this-context-in-Application_5F00_Start.aspx

于 2010-05-09T00:56:23.303 に答える