【问题标题】:ASP.NET Web Api 2 - Subdomain Attribute RoutingASP.NET Web Api 2 - 子域属性路由
【发布时间】:2013-07-10 16:41:55
【问题描述】:

我在我的 MVC 应用程序中使用AttributeRouting 已经有一段时间了。但是,它始终缺少的一件事是 Web Api 中的子域路由(以及该库中适用于 MVC 但不适用于 Web Api 的其他功能)。

现在我刚刚阅读了关于属性路由的new improvements in Web Api,它现在包含在开箱即用的 Web Api 中。

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

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api asp.net-web-api-routing


    【解决方案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;
        }
    }
    

    第三,在映射属性路由时,使用你的自定义路由构建器(调用需要路由构建器的重载):

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

    【讨论】:

    • 谢谢,效果很好。在这里记录一下,对于 DomainConstraint.Match() 只需返回 request.RequestUri.Host == _domain;
    • dmatson 我在此之后提出了另一个问题,因为我被困得更远了。如果您知道此相关位,请提供帮助。 stackoverflow.com/q/17624551/1267778
    猜你喜欢
    • 2017-03-24
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2014-05-28
    • 2015-05-21
    相关资源
    最近更新 更多