gpt4 book ai didi

asp.net-mvc - 从 Multi-Tenancy asp.net mvc 应用程序中的 url 识别租户

转载 作者:行者123 更新时间:2023-12-04 01:29:43 24 4
gpt4 key购买 nike

我正在创建一个 Multi-Tenancy asp.net 应用程序。我希望我的网址跟随

**http://www.example.com/test1/test2/**{tenantName}/{controller}/{action}
**http://www.example.com/test1/**{tenantName}/{controller}/{action}
**http://www.example.com/**{tenantName}/{controller}/{action}

这里url中粗体部分是固定的(不会改变){tenantName}=将是逻辑租户实例。

我已关注this关联处理这个问题的路由是什么?

最佳答案

就这么简单:

routes.MapRoute(
"MultiTenantRoute", // Route name
"test1/test2/{tenantName}/{controller}/{action}/{id}", // URL with parameters
new { id = UrlParameter.Optional } // Parameter defaults, if needed
);

没有大括号的部分必须匹配。大括号内的部分将被传输为路线数据参数。我添加了一个可选参数 id,正如您通常在 Controller 中找到的那样,但您可以自定义它。您还可以照常为租户名称、 Controller 或操作指定默认值。

请记住,路由是按照注册顺序进行评估的,因此您应该先注册此路由,然后再注册其他路由。

问题更新后编辑

您不能在路由开头指定如下所示的 catch all 参数:{*segment}。那是不可能的。 ASP.NET MVC 不知道这部分要包含多少段,也不知道要为路由中的其余参数保留多少段。

因此,您需要为每种可能的情况添加一条路由,并考虑到将使用第一个匹配的路由。因此,您需要以额外参数开头的路由,如下所示:

{tenanName}...
{segment1}{tenanName}...
{segment1}/{segment2}/{tenanName}...

根据预期 URL 的结构,您可能需要添加约束以确保路由正确匹配。这可以通过将第四个参数传递给 MapRoute 方法来完成。这是一个匿名类,就像 defaults 参数一样,但每个参数的指定值是一个约束。这些约束的最简单形式就是用作正则表达式 (regex) 的简单字符串。

如果预期的 URL 变化很大,then implement yout own routing class .

关于asp.net-mvc - 从 Multi-Tenancy asp.net mvc 应用程序中的 url 识别租户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386056/

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