asp.net маршрутизация MVC - переписать URL - PullRequest
2 голосов
/ 29 сентября 2010

после отладки я получаю следующий URL моего веб-проекта:

http://localhost:54594/Home/Home                  /Home-Controller/Home-Action
http://localhost:54594/AboutUs/AboutUs            /AboutUs-Controller/AboutUs-Action
http://localhost:54594/Products/Products          /Products-Controller/Products-Action

В моем global.asax у меня есть:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Home", id = UrlParameter.Optional } // Parameter defaults
    );
}

Я хочу показать свои URL-адреса следующим образом:

http://localhost:54594/Home          /Home action or controller
http://localhost:54594/AboutUs       /AboutUs action or controller
http://localhost:54594/Products      /Products action or controller

С Home.aspx это работает нормально, потому что это мой URL по умолчанию, как я могу сделать то же самое с остальными URL?

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

Вы можете сделать это несколькими способами, один из них будет иметь контроллер для каждой области и каждый контроллер иметь одно действие Index. Это создаст URL-адреса по мере необходимости с ограниченной конфигурацией маршрутизации.

Другой метод будет иметь один контроллер и несколько действий (по одному для каждого дома, AboutUs, Products) и установить маршрут, который будет примерно таким (непроверенный) ...

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Home", id = UrlParameter.Optional } // Parameter defaults
    );
}

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

Редактировать

Только что проверил следующий код со следующими допущениями -

1 контроллер (HomeController)

В Global.ascx

   public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

    }

В HomeController

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";

        return View();
    }

    public ActionResult AboutUs()
    {
        return View();
    }
}

Это позволит:

http://localhost:port/

http://localhost:port/index

http://localhost:port/aboutus

0 голосов
/ 29 сентября 2010

У меня был бы контроллер "Home" с действием "Home" / "Index" для "http://localhost:54594/Home". И для" http://localhost:54594/AboutUs". Я бы также использовал контроллер "Home" с действием "AboutUs".

Для "http://localhost:54594/Products" у меня был бы собственный контроллер, поскольку он, вероятно, будет более сложным. Маршрут по умолчанию должен служить для этого нормально.

Я бы направил" / AboutUs "кДействие "/ Home / AboutUs" с чем-то вроде этого:

routes.MapRoute(
    "AboutUs_Shortcut", "AboutUs", new { controller = "Home", action = "AboutUs" }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...