ASP.NET Web Api 2 - 子域属性路由

2024-01-11

我一直在使用属性路由 http://attributerouting.net/在我的 MVC 应用程序中已经有一段时间了。然而,它始终缺少的一件事是 Web Api 中的子域路由(该库中的其他功能可与 MVC 配合使用,但不能与 Web Api 配合使用)。

现在我刚刚读到Web Api 的新改进 http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2关于属性路由,它现在已包含在开箱即用的 Web Api 中。

但是,我没有看到提到子域路由。 Web Api 2 支持吗? 如果没有,我如何在我的 Web Api 中获取子域路由,以便我可以使用 ApiControllerhttp://api.mydomain.com/cars/1?


路由通常用于 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"));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Web Api 2 - 子域属性路由 的相关文章

随机推荐