Действительно ли возможно сделать маршрут MVC ASP.NET на основе субдомена?

233
задан tereško 12 July 2012 в 19:47
поделиться

3 ответа

Можно сделать это путем создания нового маршрута и добавления его к набору маршрутов в RegisterRoutes в global.asax. Ниже очень простой пример пользовательского Маршрута:

public class ExampleRoute : RouteBase
{

    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        var url = httpContext.Request.Headers["HOST"];
        var index = url.IndexOf(".");

        if (index < 0)
            return null;

        var subDomain = url.Substring(0, index);

        if (subDomain == "user1")
        {
            var routeData = new RouteData(this, new MvcRouteHandler());
            routeData.Values.Add("controller", "User1"); //Goes to the User1Controller class
            routeData.Values.Add("action", "Index"); //Goes to the Index action on the User1Controller

            return routeData;
        }

        if (subDomain == "user2")
        {
            var routeData = new RouteData(this, new MvcRouteHandler());
            routeData.Values.Add("controller", "User2"); //Goes to the User2Controller class
            routeData.Values.Add("action", "Index"); //Goes to the Index action on the User2Controller

            return routeData;
        }

        return null;
    }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        //Implement your formating Url formating here
        return null;
    }
}
167
ответ дан Jon Cahill 23 November 2019 в 03:33
поделиться

Да, но необходимо создать собственный обработчик маршрутов.

Обычно маршрут не знает о домене, потому что приложение могло быть развернуто на любом домене, и маршрут не будет заботиться так или иначе. Но в Вашем случае Вы хотите основывать контроллер и действие от домена, таким образом, необходимо будет создать пользовательский маршрут, который знает о домене.

3
ответ дан Nick Berardi 23 November 2019 в 03:33
поделиться

Это не моя работа, но у меня чтобы добавить это к этому ответу.

Вот отличное решение этой проблемы. Маартин Баллиау написал код, который создает класс DomainRoute, который можно использовать аналогично обычной маршрутизации.

http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

Пример использования будет таким ...

routes.Add("DomainRoute", new DomainRoute( 
    "{customer}.example.com", // Domain with parameters 
    "{action}/{id}",    // URL with parameters 
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults 
))

;

{ {1}}
24
ответ дан 23 November 2019 в 03:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: