вторник, 2 апреля 2013 г.

Переводим PHP-сайт сайт на ASP.NET MVC без изменения вида ссылок

Предположим, что у нас есть PHP-сайт со страницей http://site.com/res.php?anyparameters и мы хотим настроить маршрутизацию в ASP.NET MVC4 так, чтобы эта php-ссылка осталась без изменений (у клиентов уже есть софт, настроенный на работу с этим урлом). При этом в GET-запросе может быть параметр с именем "action" ("action=addfunds", "action=logout",...)
Тогда делаем следующее

1. В методе RegisterRoutes класса RouteConfig прописываем следующие URL-паттерны:

routes.MapRoute(
                name: "ApiDocs",
                url: "api",
                defaults: new { controller = "Page", action = "Api" }
            );

 routes.MapRoute(
                name: "pull_php",
                url: "pull.php",
                defaults: new { controller = "Method", action = "Pull", key = UrlParameter.Optional }
            );

routes.MapRoute(
                name: "pull",
                url: "pull",
                defaults: new { controller = "Method", action = "Pull", key = UrlParameter.Optional }
            );

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}",
                defaults: new {controller = "Page", action = "Main"});

2. В контроллере Method пишем
[HttpGet]
        public ActionResult Pull(String key, String id)
        {
            var apiAction = Request["action"];
            ...
            return View(result);
        }

Вот и всё.