MVC3 и переписывает - PullRequest
       5

MVC3 и переписывает

3 голосов
/ 25 мая 2011

Я пишу приложение MVC3, которое должно будет использовать переписывание URL в форме http://[server]/[City]-[State]/[some term] /.

Насколько я понимаю, MVC3 содержит механизм маршрутизации, который использует {контроллер} / {action} / {id}, который определен в файле 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 = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

    }

Традиционно (в приложении, отличном от MVC), я бы использовал некоторую разновидность перезаписи URL для декодирования URL, напримеркак http://www.myserver.com/City-State/somesearch/ для параметров строки запроса, которые выглядят примерно так: http://www.myserver.com/city=City&state=State&query=somesearch

Имейте в виду, что этот запрос будет поступать с http://www.myserver.com/Home

Может ли этобыть выполненным без указания контроллера ... что-то вроде этого:

routes.MapRoute(
            "Results",
            "{city}-{state}/{searchTerm}",
            new { controller = "Results", action = "Search" }
        );

... или действительно лучше иметь контроллер в списке?

Как вы справляетесь с этим всреда MVC3?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 24 ноября 2011

Перезапись URL в asp.net MVC3: - вы можете написать код для перезаписи URL в файле Global.asax: -

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

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

      //others url rewriting you want

        RouteTable.Routes.MapRoute(null, "Search/{City_State}/{ID}", new { controller = "Home", action = "Search" });
2 голосов
/ 25 мая 2011

Ознакомьтесь с этими двумя ответами:

Сводка:

  • Укажите пользовательские маршруты до по умолчанию.
  • Определите конкретные маршруты дообщие, поскольку они могут совпадать с обоими.
  • Значения по умолчанию являются необязательными.
  • Укажите контроллер по умолчанию и действие в объекте параметра по умолчанию.
0 голосов
/ 11 сентября 2012

Вы можете сделать это, зарегистрировав маршрут в файле Global.asax, но для регистрации маршрута важно, чтобы вы сначала зарегистрировали старый маршрут, а затем новый.

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

// for Old url 
routes.MapRoute(
    "Results",
    "{city}-{state}/{searchTerm}",
    new { controller = "Results", action = "Search" }
);

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