Один сайт, несколько клиентов интерфейса - PullRequest
0 голосов
/ 03 декабря 2008

У меня есть сайт Asp.net Mvc, на котором я хочу предоставить отдельный доступ и пользовательский интерфейс для разных клиентов, таких как: http://company1.mysite.com
http://company2.mysite.com
http://company3.mysite.com

У каждого клиента будет свой пользовательский интерфейс, но практически одинаковые функциональные возможности (или с некоторыми отключенными функциями).
Я хотел бы отделить графику для каждого клиента, такую ​​как логотип, CSS и изображения.

Как лучше всего это реализовать?

Ответы [ 3 ]

1 голос
/ 03 декабря 2008

Есть несколько вещей, которые вы можете сделать. Первый уровень, как уже упоминалось, заключается в использовании другого файла CSS. Вы можете динамически указать другой путь к файлу CSS, создав метод Helper. Так что будет использовано что-то вроде этого:

<link href="<%=AppHelper.GetCSSPath("mysite.css")%>" rel="stylesheet" type="text/css" />

Это дает вам некоторый уровень настройки. Дальнейший уровень будет на самом деле иметь разные файлы просмотра для каждого подузла. Вы можете сделать это, создав новый ViewEngine:

public class SubSiteViewEngine: WebFormViewEngine
{

  private string GetSiteRoot() {
   // some logic to get the site root from the incoming URL
  }

  public SubSiteViewEngine()
  {

    MasterLocationFormats = new[] { 
            GetSiteRoote() + "/Views/{1}/{0}.master", 
            GetSiteRoote() + "/Views/Shared/{0}.master" ,
            GetSiteRoote() + "/Views/Shared/MasterViews/{0}.master" 
        };
    ViewLocationFormats = new[] { 
            GetSiteRoote() + "/Views/{1}/{0}.aspx", 
            GetSiteRoote() + "/Views/{1}/{0}.ascx", 
            GetSiteRoote() + "/Views/Shared/{0}.aspx", 
            GetSiteRoote() + "/Views/Shared/{0}.ascx",
            GetSiteRoote() + "/Views/Shared/Controls/{0}.ascx" 
        };
    PartialViewLocationFormats = ViewLocationFormats;
  }

}

Надеюсь, это поможет.

P.S. Я сделаю это в ближайшее время для своего собственного проекта, поэтому у меня скоро должен быть настоящий рабочий код.

1 голос
/ 03 декабря 2008

Другой вариант - организовать это с помощью IIS. Для этого вам придется проверить влияние на производительность, но, делая это, вы можете контролировать каждое приложение (или пул) отдельно.

По сути, вы делаете разные веб-сайты для каждого арендатора в вашей системе. Сделайте так, чтобы он указывал на папку вашего приложения для фактического кода приложения. Затем следует добавить переменное содержимое (css, библиотеку файлов? Используйте ваше воображение ;-)), используя виртуальный каталог, указывающий на их папку.

Используя этот подход, вы не рискуете пересечь данные между арендаторами из-за непредвиденных ошибок и тому подобного.

0 голосов
/ 03 декабря 2008

Вы должны проверить входящий URL и обслуживать разные CSS-файлы для каждого. Вы можете использовать фоновые изображения, если хотите менять изображения между компаниями.

Другие рекомендации:

  • Храните отдельные папки для разных компаний (и используйте рут для общих вещей)
  • Если вам нужно отключить некоторые функции, не спрашивайте название компании, а спрашивайте, разрешено ли это в текущем «профиле».

    If Company = A then
       UseFunctionX = true
    else
       UseFunctionX = false
    
    //later in the code
    If UseFunctionX then
        // do domenthing
    

    Таким образом, добавление дополнительных профилей последним проще

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...