par*_*ent 2 asp.net-mvc asp.net-web-api asp.net-web-api-routing
我在MVC应用程序中使用AttributeRouting已经有一段时间了.但是,它总是缺少的一件事是Web Api中的子域路由(该库中的其他功能与MVC一起工作,但不适用于Web Api).
现在我刚刚阅读了有关属性路由的Web Api的新改进,现在它已经包含在Web Api中.
但是,我没有提到子域路由.Web Api 2是否支持它?如果没有,我如何在我的Web Api中获得子域路由,以便我可以使用ApiController http://api.mydomain.com/cars/1?
路由通常用于域/端口之后的URL部分.只要您将主机配置为允许Web API处理域的请求,您就应该能够在该域中路由URL.
如果您确实希望路由是特定于域的(例如,只有对特定路由处理的api.mydomain.com域的请求),则可以使用自定义路由约束.要使用属性路由做到这一点,我认为您需要:
首先,自定义路由约束类本身.有关MVC域示例,请参阅http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-custom-route-constraint-cs ; Web 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;
}
}
Run Code Online (Sandbox Code Playgroud)
第三,映射属性路由时,使用自定义路由构建器(调用路由构建器的重载):
config.MapHttpAttributeRoutes(new DomainHttpRouteBuilder("api.mydomain.com"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3668 次 |
| 最近记录: |