为每个域(多租户)动态注册路由
问题描述:
是否可以在application_start之后注册路由?在我们的多租户应用程序中,客户正在创建自己的网站(www.domaina.com,www.domainb.com等),这些都指向我们的应用程序。客户可以定义他们想要的网页。因此,我们可以在AppStart中注册所有相应的路线,但是如果客户添加了新路线,那么应用程序知道如何提供该网址?我尝试在BeginRequest中注册路线,但这似乎没有做好。为每个域(多租户)动态注册路由
基本上,我需要根据应用程序通过哪个域输入不同的路线。任何人都做过这样的事情?
答
您可以在运行时更改路由,但是一旦您对其进行了更改,对于使用相同应用的所有域来说都是一样的。一个解决方案可以是为每个路由配置使用此应用程序的不同实例,而不是根据实例特定的域名进行配置。
答
您可以创建自定义路线。
public class MyRoute : RouteBase
{
private readonly RoutesRepository _routesRepository;
public MyRoute(RoutesRepository routesRepo)
{
_routesRepository = routesRepo;
}
#region Overrides of RouteBase
public override RouteData GetRouteData(HttpContextBase httpContext)
{
//Here you get all custom urls(that users have created) for current domain. Then try to match request url with urls from collection. If ok then create route and return it.
}
...
#endregion
}
另一种选择: 您可以添加自定义的约束路由。约束将检查当前域是否有权访问特定页面。