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 路由帖子为我指明了正确的方向(即使它是针对 mvc 而不是 Web 表单)。

于 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 回答