【发布时间】:2020-01-17 20:57:04
【问题描述】:
我现在正在试用 Finbuckle 多租户库,并已设法为用户设置租户信息。
但是,当我重定向到另一个页面并在视图中加载租户信息时,它显示为 null。我做错了吗?
这就是我获取和设置租户信息的方式:
var OrganizationId = HttpContext.User.Claims.Where(xc => xc.Type == MultiTenancy.ClassLibrary.Globals.CookieGlobals.OrganizationId).Select(xc => xc.Value).SingleOrDefault();
var tenantInfo = await store.TryGetByIdentifierAsync(OrganizationId);
HttpContext.TrySetTenantInfo(tenantInfo, resetServiceProvider: true);
var ti = HttpContext.GetMultiTenantContext()?.TenantInfo;
return RedirectToAction("Sample", "Home", new { __tenant__ = tenantInfo.Name });
这是示例视图:
@using Microsoft.AspNetCore.Identity
@{
ViewData["Title"] = "Sample";
Layout = "~/Views/Shared/_Layout.cshtml";
var tenantInfo = Context.GetMultiTenantContext()?.TenantInfo;
}
@using Finbuckle.MultiTenant.AspNetCore
<h2>@tenantInfo.Name</h2>
编辑:
到目前为止,如果我这样做是有效的:
public async Task<ActionResult> Sample()
{
var OrganizationId = HttpContext.User.Claims.Where(xc => xc.Type == MultiTenancy.ClassLibrary.Globals.CookieGlobals.OrganizationId).Select(xc => xc.Value).SingleOrDefault();
var tenantInfo = await store.TryGetByIdentifierAsync(OrganizationId);
HttpContext.TrySetTenantInfo(tenantInfo, resetServiceProvider: true);
var ti = HttpContext.GetMultiTenantContext()?.TenantInfo;
return View(ti);
}
但这意味着必须始终设置tenantinfo。有没有办法让它持久化?
这是我的 Startup.cs:
services.AddMultiTenant()
.WithEFCoreStore<MultiTenancyDbContext, TenantInfo>()
.WithDelegateStrategy(context => {
var organizationId = ((HttpContext)context).User.Claims.Where(xc => xc.Type == MultiTenancy.ClassLibrary.Globals.CookieGlobals.OrganizationId).Select(xc => xc.Value).SingleOrDefault();
return Task.FromResult(organizationId);
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}"
);
});
【问题讨论】:
标签: c# asp.net-mvc asp.net-core asp.net-core-mvc multi-tenant