我正在研究我的第二个多租户MVC应用程序。我的第一次没有使用子域名。相反,它使用带有租户(clientportal)标识符的第一个参数的路由。
Route route = new Route("{clientportal}/{controller}/{action}/{id}",
new RouteValueDictionary(new
{
controller = "ClientPortalHome",
action = "Index",
id = UrlParameter.Optional
}), new PortalRouteHandler());
这一次,我需要使用实际的子域名。
Client1.mysite.com
Client2.mysite.com
为实现这一目标,我实现了类似于此的子域路由:
Is it possible to make an ASP.NET MVC route based on a subdomain?
我的问题是这个。处理加载我的用户和验证请求的正确位置在哪里?
在子域路由之前触发Application_AuthenticateRequest。这意味着当AuthenticateRequest正在执行时,我不知道该请求适用于哪个租户。
也许我可以加载用户并在子域路由代码中验证请求,但这有点错误。
我在这里缺少什么?
答案 0 :(得分:1)
您应该使用自定义授权过滤器。它在控制器进程的最初阶段被触发,您将获得在ControllerContext中对用户进行身份验证所需的所有信息。