gpt4 book ai didi

asp.net-web-api - ASP.NET Web API RTM 和子域路由

转载 作者:行者123 更新时间:2023-12-01 02:32:07 26 4
gpt4 key购买 nike

我在让 Web API 与基于子域的路由一起工作时遇到问题。简而言之,我正在使用正确的 Controller 和方法,但是来自子域的数据 token 没有被 WebAPI 获取。

我在我的场景中有这个:

contoso.myapp.com
fabrikam.myapp.com
{tenant}.myapp.com

全部解析为相同的 ApiController,我希望能够提取 {tenant} token 。

我使用了本文中的代码 http://blog.maartenballiauw.be/post/2012/06/18/Domain-based-routing-with-ASPNET-Web-API.aspx

但是,从撰写本文到 ASP.NET Web Api 退出测试阶段之间,似乎发生了一些变化。文中代码依赖 RouteTable.Routes而在 Web API 上的路由是通过 HttpConfiguration.Routes 配置的这是一个 HttpRouteCollection而不是通常的 RouteCollection (它实际上源自 RouteCollection)。

所以我将代码更改为派生自 HttpRoute而不是 Route .这是代码:

https://gist.github.com/3766125

我配置了这样的路由
 config.Routes.Add(new HttpDomainRoute(
name: "test",
domain: "{tenant}.myapp.com",
routeTemplate: "test",
defaults: new { controller = "SomeController", action = "Test" }
));

我的请求被路由到正确的 Controller 。但是,租户数据 token 永远不会被填充(如果我这样做 this.Request.GetRouteData() 我会看到 Controller 和操作 token ,但没有看到租户)。如果我在 GetRouteData 上设置断点它永远不会被调用。

我尝试使用反射器跟踪代码路径,并查看在 HttpRouteCollection 级别调用 GetRouteData 的位置,但似乎该集合枚举为空。不确定常规 ASP.NET 路由和 WEB API 路由之间的集成是如何桥接的,但这让我感到困惑。

有任何想法吗?

我现在使用的解决方法是通过 Route 显式调用 GetRouteData
this.Request.GetRouteData().Route.GetRouteData(this.Request.RequestUri.ToString(), this.Request)

最佳答案

感谢您报告问题。我在 https://github.com/woloski/AspNetWebApiWithSubdomains 使用了你的复制品并做了一些调试。

这就是它发生的原因。 HttpDomainRoute.GetRouteData没有被调用,因为它被一个名为 HttpWebRoute 的内部类包装了在 Web API 中。当您使用 config.Routes.Add添加自定义路由的方法,而不是调用 HttpDomainRoute.GetRouteData ,它会简单地调用 System.Web.Routing.Route's GetRouteData 的实现.这就是为什么您会看到除租户之外的其余参数都被正确映射。

我想不出任何简单的解决方法。我可以在位于 http://aspnetwebstack.codeplex.com/ 的 codeplex 站点上提交问题。跟踪此问题。

关于asp.net-web-api - ASP.NET Web API RTM 和子域路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12544150/

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