Разрешить пользователю при регистрации просматривать username.host.com - PullRequest
1 голос
/ 16 сентября 2011

Я использую Asp.net MVC3 и C # и IIS 7.5.Я хочу, чтобы после регистрации пользователь мог просматривать мой сайт с помощью username.host.com, и это имя пользователя должно быть доступно мне в строке запроса, чтобы я мог отображать данные, относящиеся только к этому конкретному имени пользователя.Вся логика одинакова для всех пользователей.Я не хочу делать какие-либо причудливые вещи, например, если введен user1.host.com, то я хочу перенаправить на отдельный контроллер, действие и т. Д. Вся логика приложения одинакова для всех пользователей.Я просто хочу изменить способ отображения URL в браузере.

Примечание: Я не говорю о создании динамических поддоменов.Это большая задача!

Поскольку маршрутизация в MVC настолько мощна, я предполагаю, что это можно сделать в одиночку, используя маршрутизацию.Также, если возможно, я хочу, чтобы это работало на локальном хосте также в IIS / Cassini.

Например: Если я перехожу к jaggu.localhost: 19883 .Он должен отправить меня по адресу localhost: 19883 / Home / index / Jaggu (потому что по умолчанию Home - это контроллер, а index - метод)

Я совершенно не понимаю, как этого добиться.Любая помощь будет оценена.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 16 сентября 2011

С точки зрения маршрутизации ASP.NET MVC это просто.Просто введите собственный маршрут:

public class MyRoute : Route
{
    public MyRoute(string url, object defaults)
        : base(url, new RouteValueDictionary(defaults), new MvcRouteHandler())
    { }

    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        var rd = base.GetRouteData(httpContext);
        var tokens = httpContext.Request.Url.Host.Split('.');
        if (tokens.Length > 1)
        {
            rd.Values["username"] = tokens[0];
        }
        return rd;
    }
}

и зарегистрируйте этот маршрут:

routes.Add(
    "Default",
    new MyRoute(
        "{controller}/{action}/{username}",
        new { controller = "Home", action = "Index", username = UrlParameter.Optional }
    )
);

Теперь, когда кто-то запрашивает http://foo.host.com, автоматически действие Index для HomeController будетбыть вызван и передан username="foo" параметр.

Затем наступает трудная часть.Регистрация и управление поддоменами и настройка веб-сервера.Тема, более подходящая для обсуждения http://serverfault.com

0 голосов
/ 19 сентября 2011

Работать с www. {Site} .com / {username} значительно проще, чем то, что вы пытаетесь сделать.

субдомены предназначены для разделения отдельных веб-сайтов;не области содержимого.

Даже если вы заставите его работать, вы обнаружите больше проблем, таких как работа с SSL-сертификатами (если они вам нужны) и всегда забавная браузерная «та же самая политика происхождения».

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