路由通常用于 URL 中域/端口之后的部分。只要您将主机配置为让 Web API 处理域请求,您就应该能够在该域内路由 URL。
如果您确实希望路由特定于域(例如仅由某个路由处理对 api.mydomain.com 域的请求),则可以使用自定义路由约束。要使用属性路由来做到这一点,我认为您需要:
首先,自定义路由约束类本身。看http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-custom-route-constraint-cs http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-custom-route-constraint-cs对于 MVC 域示例; Web API 接口略有不同(http://msdn.microsoft.com/en-us/library/system.web.http.routing.ihttprouteconstraint(v=vs.108).aspx 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"));