2013-07-12 2 views
2

나는 내 MVC 응용 프로그램에서 꽤 오랫동안 AttributeRouting을 사용 해왔다. 그러나 항상 부족한 것은 Web Api에서 하위 도메인 라우팅입니다 (MVC와 작동하는 라이브러리의 다른 기능 중에서도 Web API는 제외).ASP.NET 웹 API 2 - 하위 도메인 특성 라우팅

이제 특성 라우팅과 관련하여 new improvements in Web Api에 대해 읽었으며 이제는 Web API에 포함되어 있습니다.

그러나 하위 도메인 라우팅에 대한 언급이 없습니다. Web Api 2에서 지원됩니까? 그렇지 않은 경우 어떻게을 사용하여 ApiController에 도달 할 수 있도록 내 웹 API에서 하위 도메인 라우팅을 얻을 수 있습니까?

답변

6

라우팅은 일반적으로 도메인/포트 다음의 URL 부분에 사용됩니다. 웹 API가 도메인에 대한 요청을 처리하도록 호스트를 구성한 경우 해당 도메인 내의 URL을 라우트 할 수 있어야합니다.

라우팅을 특정 도메인에서 수행하려는 경우 (특정 경로에서 처리되는 api.mydomain.com 도메인에 대한 요청 만있는 경우 등) 사용자 지정 라우트 제약 조건을 사용할 수 있습니다. 속성 라우팅을 사용하려면 다음과 같이해야합니다.

먼저 사용자 지정 라우트 제약 조건 클래스 자체. MVC 도메인 예제는 http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-custom-route-constraint-cs을 참조하십시오. 웹 API 인터페이스는 약간 다릅니다 (http://msdn.microsoft.com/en-us/library/system.web.http.routing.ihttprouteconstraint(v=vs.108).aspx).

둘째, 맞춤 경로 작성 도구입니다. HttpRouteBuilder에서 파생시키고 BuildHttpRoute 메서드를 재정 의하여 제약 조건을 추가합니다. 이런 식으로 뭔가 :이 위대한 일을,

config.MapHttpAttributeRoutes(new DomainHttpRouteBuilder("api.mydomain.com")); 
+0

감사 : 매핑 경로를 속성 때

public class DomainHttpRouteBuilder : HttpRouteBuilder { private readonly string _domain; public DomainHttpRouteBuilder(string domain) { _domain = domain; } public override IHttpRoute BuildHttpRoute(string routeTemplate, IEnumerable<HttpMethod> httpMethods, string controllerName, string actionName) { IHttpRoute route = base.BuildHttpRoute(routeTemplate, httpMethods, controllerName, actionName); route.Constraints.Add("Domain", new DomainConstraint(_domain)); return route; } } 

셋째, (경로 빌더를 걸리는 과부하를 호출) 사용자 정의 경로 빌더를 사용합니다. 여기에있는 레코드는 DomainConstraint.Match()에서 간단히 return request.RequestUri.Host == _domain; – parliament

+0

dmatson 나는 조금 더 아래로 붙어 있기 때문에 이것을 뒤 따르는 또 다른 질문을했다. 이 관련 비트를 알고 계시면 도움을 받으십시오. http://stackoverflow.com/q/17624551/1267778 – parliament