Маршрутизация обычно используется для части URL-адреса после домена/порта. Пока ваш хост настроен на обработку запросов веб-API для домена, вы должны иметь возможность маршрутизировать URL-адреса в этом домене.
Если вы хотите, чтобы маршрутизация была специфичной для домена (например, запросы к домену api.mydomain.com обрабатывались определенным маршрутом), вы можете использовать настраиваемое ограничение маршрута. Чтобы сделать это с маршрутизацией атрибутов, я думаю, вам понадобится:
Во-первых, сам класс ограничения пользовательского маршрута. См. http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-custom-route-constraint-cs для примера домена MVC; интерфейс веб-API немного отличается (http://msdn.microsoft.com/en-us/library/system.web.http.routing.ihttprouteconstraint(v=vs.108).aspx).
Во-вторых, пользовательский конструктор маршрутов. Наследуйте от HttpRouteBuilder и переопределите метод BuildHttpRoute, чтобы добавить ограничение. Что-то вроде этого:
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;
}
}
В-третьих, при сопоставлении маршрутов атрибутов используйте собственный построитель маршрутов (вызовите перегрузку, которая использует построитель маршрутов):
config.MapHttpAttributeRoutes(new DomainHttpRouteBuilder("api.mydomain.com"));
person
dmatson
schedule
12.07.2013