2010-05-08 2 views
2

도메인/하위 도메인/호스트를 기반으로 global.asax Application_Start 이벤트에서 생성 된 라우팅 테이블의 경로 대상을 조정하는 가장 좋은 방법은 무엇입니까? 는 IIS6에서 일 다음,하지만 IIS7에 요청 객체는 Application_Start 이벤트에서 분리되고, 따라서 더 이상 작동하지 않습니다도메인/호스트를 기반으로 asp.net URL 라우팅을 조정하는 방법은 무엇입니까?

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

나는 내 자신의 문제를 해결 한 것 같다. IIS7.0을 사용하여 Application_Start에서 요청 개체에 액세스 할 수는 없지만 사용자 지정 라우트 제약 조건에서 사용할 수는 있습니다. 여기 내가 어떻게 그랬어.

사용자 정의 경로 제약 조건을 정의합니다

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 routing 게시물에 큰 감사를 전합니다 (mvc가 아니고 웹 양식이더라도).

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

+0

예제는 실제 구현에서 제외되었으므로 관련 로직은 web.config (고정 경로 정의)를 사용하여 작동하지 않습니다. 그래, 나는 그 기사를 보았다. begin_request에 대한 페이지 이동 경로 매핑이 작동하지 않는다고 생각하며 AppDomainAppVirtualPath가 호스트 이름을 기반으로하는 논리를 가지고 있기 때문에 도움이되지 않습니다. 내 생각에 솔루션은 페이지 요청 수준에서 라우팅이 실행되는 수단에 과부하가 걸리는 것과 관련이 있으며 라우트가 정의 된 위치 (application_start)가 아닙니다. 나는 그것을하는 방법에 관해서 단서가 없다. 어떤 아이디어 나 제안? – DrewF

+0

appsettings에서 web.config에 "domain1.com"을 저장하는 것에 대해 이야기했습니다. –