ASP.NET MVC 3 удалить / Главная - PullRequest
       4

ASP.NET MVC 3 удалить / Главная

1 голос
/ 03 сентября 2011

Я создал новое интернет-приложение ASP.NET MVC 3 в Visual Web Developer 2010 Express и заметил, что с этим шаблоном по умолчанию путь localhost:port/Home показывает то же содержимое, что и localhost:port/

Есть ли способ удалить /Home?Я бы только хотел, чтобы localhost:port/ была целевой страницей.

Ответы [ 2 ]

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

Другие парни правы. Однако они действительно не говорят вам способ обойти это. Один из способов получить лучший контроль над маршрутами заключается в следующем

Сделайте что-то вроде ниже в методе Регистрация маршрутов

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(t => !t.IsAbstract && t.Navigate(_ => _.BaseType).Any(_ => _ == typeof(Controller)));
        foreach (var controller in controllers)
        {
            var actions = controller.GetMethods().Where(m => m.HasAttribute<RouteAttribute>()).Select(m => new { Method = m, Attribute = m.GetAttribute<RouteAttribute>() }).ToArray();
            foreach (var action in actions.OrderBy(m => m.Attribute.Path.Count(c => c == '{')))
                routes.MapRoute(string.Format("{0}.{1}", controller.Name, action.Method.Name), action.Attribute.Path.TrimStart('/'), new { controller = controller.Name.Replace("Controller", ""), action = action.Method.Name });
        }

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

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

Оба URL работают, потому что именно так в Global.asax определен маршрут по умолчанию:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Это означает, что все /, /Home и /Home/Index попадут на HomeController/Index действие.Так что на самом деле, когда вы запрашиваете /, выполняется точно такое же действие.

Вы можете изменить его следующим образом:

routes.MapRoute(
    "Default",
    "{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Конечно, выполняя это единственный контроллер идействие, которое вы когда-либо сможете выполнить в своем приложении, будет действием HomeController и Index.Никакие другие действия или контроллеры никогда не будут доступны, так как вы не предоставляете никаких средств для их указания в URL.Поэтому я бы оставил маршруты по умолчанию как есть, потому что они позволяют обрабатывать 99% случаев, если у вас нет особых требований.

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