gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:21:39 26 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

首先,自定义路由约束类本身。见 http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-custom-route-constraint-cs对于 MVC 域示例; Web API 接口(interface)略有不同( 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"));

关于asp.net-mvc - ASP.NET Web Api 2 - 子域属性路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17609825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com