Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET Web Api 2-子域属性路由_Asp.net Mvc_Asp.net Web Api_Asp.net Web Api Routing - Fatal编程技术网

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

Asp.net mvc ASP.NET Web Api 2-子域属性路由,asp.net-mvc,asp.net-web-api,asp.net-web-api-routing,Asp.net Mvc,Asp.net Web Api,Asp.net Web Api Routing,我已经在MVC应用程序中使用了相当长的一段时间。然而,它一直缺少的一件事是WebAPI中的子域路由(该库中的其他功能与MVC一起工作,而不是WebAPI) 现在我刚刚读到关于属性路由的内容,它现在包含在WebAPI开箱即用中 但是,我没有看到关于子域路由的提及。Web Api 2中是否支持它? 如果没有,如何在Web Api中获取子域路由,以便使用http://api.mydomain.com/cars/1?路由通常用于域/端口之后的URL部分。只要将主机配置为允许Web API处理域请求,就应

我已经在MVC应用程序中使用了相当长的一段时间。然而,它一直缺少的一件事是WebAPI中的子域路由(该库中的其他功能与MVC一起工作,而不是WebAPI)

现在我刚刚读到关于属性路由的内容,它现在包含在WebAPI开箱即用中

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

路由通常用于域/端口之后的URL部分。只要将主机配置为允许Web API处理域请求,就应该能够在该域内路由URL

如果确实希望路由是特定于域的(例如,只有对api.mydomain.com域的请求由特定路由处理),则可以使用自定义路由约束。要使用属性路由实现这一点,我认为您需要:

首先,自定义管线约束类本身。有关MVC域示例,请参见;Web API接口略有不同()

第二,自定义管线生成器。从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;
    }
}

谢谢,这很有效。对于这里的记录,对于DomainConstraint.Match(),只需返回request.RequestUri.Host==\u domain;dmatson我问了另一个问题,因为我被困得更深了一点。如果您知道此相关信息,请提供帮助。
config.MapHttpAttributeRoutes(new DomainHttpRouteBuilder("api.mydomain.com"));