#asp.net #webforms #multi-tenant
#asp.net #веб-формы #многопользовательский режим
Вопрос:
Я добился успеха в реализации многопользовательской работы в приложениях MVC с использованием Saaskit. Приложения имеют отдельную базу данных для каждого клиента. Я хотел бы реализовать что-то подобное в проекте webforms. Кто-нибудь может указать мне правильное направление? Возможно ли это вообще?
Должен иметь:
- Обнаружение арендатора на основе домена/ URL
- Должна поддерживать базу данных для каждого клиента
Ответ №1:
Удалось использовать новую поддержку Unity в Webforms 4.7.2 для поддержки этого:
public class TenantResolver : ITenantResolver
{
public Tenant GetTenant()
{
var identifier = HttpContext.Current.Request.Url.Host.ToLower();
return AllTenants().FirstOrDefault(x => x.HostNames.Any(a => a.Hostname.Contains(identifier)));
}
public List<Tenant> AllTenants()
{
// return list of tenants from configuration or seperate db
}
}
При запуске
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
var container = this.AddUnity();
container.RegisterType<ITenantResolver, TenantResolver>();
container.RegisterType<ApplicationContext, ApplicationContext>();
}
Пример страницы с доступом к арендатору
public partial class About : Page
{
readonly Tenant tenant;
readonly ApplicationContext _context;
public About(ITenantResolver tenantresolver, ApplicationContext context)
{
tenant = tenantresolver.GetTenant();
_context = context;
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
Пример контекста БД с БД для каждого Клиента
public class ApplicationContext : DbContext
{
public ApplicationContext(ITenantResolver tenantResolver) : base(ConnectionStringResolver(tenantResolver)) {
}
private string ConnectionStringResolver(AppTenant appTenant)
{
var tenant = tenantResolver.GetTenant();
if (tenant != null)
{
return tenant.ConnectionString;
}
throw new NullReferenceException("Tenant Not Found");
}
}
Ответ №2:
API членства по умолчанию должен соответствовать требованиям.
Если нет, рассмотритеhttp://www.asp.net/general/videos/how-do-i-create-a-custom-membership-provider
Смотрите учебные пособия>http://www.asp.net/security/tutorials
Видеоролики http://www.asp.net/security/videos
Лучшие практики описаны в приведенных выше руководствах.
Комментарии:
1. Можно видеть, что это было скопировано из сообщения в 2011 году … forums.asp.net/t/… 2-я и третья ссылки в настоящее время не функционируют.
2. Также может не использоваться членство, возможно, используется идентификатор: learn.microsoft.com/en-us/aspnet/identity/overview /…