如何根据域/主机调整asp.net URL路由?

如何根据域/主机调整asp.net URL路由?,asp.net,iis-7,asp.net-routing,Asp.net,Iis 7,Asp.net Routing,根据域/子域/主机调整global.asax应用程序启动事件中创建的路由表的路径目标的最佳方法是什么?以下内容在IIS6中起作用,但在IIS7中,请求对象与应用程序启动事件分离,因此不再起作用: Dim strHost As String = Context.Request.Url.Host Dim strDir As String = "" If strHost.Contains("domain1.com") Then strDir = "area1/" Else

根据域/子域/主机调整global.asax应用程序启动事件中创建的路由表的路径目标的最佳方法是什么?以下内容在IIS6中起作用,但在IIS7中,请求对象与应用程序启动事件分离,因此不再起作用:

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") 

这是一个可以从web.config读取的设置吗 我似乎已经解决了我自己的问题。虽然可以在自定义路由约束中使用请求对象,但不能在IIS7.0启动的应用程序中访问请求对象。我是这样做的

定义自定义管线约束:

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

我的示例从实际实现中得到了验证,使用web.config(定义静态路由)无法实现所涉及的逻辑。是的,我看过那篇文章。我不相信将页面路由映射移动到begin_请求会起作用,AppDomainAppVirtualPath也没有帮助,因为我有基于主机名的逻辑。我猜解决方案与重载有关,重载是在页面请求级别触发路由的方式,而不是在定义路由的位置(在应用程序启动时)。我只是不知道该怎么做。有什么想法或建议吗?我说的是在appsettings下的web.config中存储“domain1.com”。