Я бы начал с маршрутизации - вы должны научить механизм маршрутизации распознавать учетную запись в URL, вот как:
routes.MapRoute(
"AccountUrl",
"{account_name}/{controller}/{action}/{id}",
new { host= UrlParameter.Optional, account_name = "", controller = "principal", action = "index", id = UrlParameter.Optional }
);
Вы должны добавить этот код до маршрут по умолчанию в вашем Global.asax.
Затем вам нужно будет найти способ выполнить логику проверки учетной записи перед каждым действием.Вы можете достичь этого с помощью фильтров.Вот код ссылки для вашего случая:
public class ValidateAccountAttribute: FilterAttribute, IActionFilter {
public void OnActionExecuting(ActionExecutingContext filterContext) {
if (filterContext.RouteData.Values.ContainsKey("account_name") ||
!IsAccountExists((string)filterContext.RouteData.Values["account_name"]))
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new {controller = "account", action = "login"}));
}
private bool IsAccountExists(string accountName) {
// TODO: Implement
throw new NotImplementedException();
}
public void OnActionExecuted(ActionExecutedContext filterContext) {
}
}
Он просто проверяет значение маршрутизации account_name и перенаправляет на страницу входа, если она пуста.Вы можете изменить URL перенаправления на все, что вам нужно.
Этот фильтр может применяться глобально (что, вероятно, не то, что вам нужно), к определенному действию или целому контроллеру.
Надеюсь, что это поможет.