Маршрутизация для .json и .xml - PullRequest
0 голосов
/ 25 октября 2011

Я новичок в MVC3, пришедшем из CakePHP, и был впечатлен. Но я столкнулся с некоторыми проблемами роста. Я работаю над разработкой приложения Flex с бэкэндом ASP.NET, поэтому я хотел бы иметь возможность использовать мои представления HTML для тестирования и XML или JSON для передачи данных во внешний интерфейс Flex.

В CakePHP мы используем класс RequestHandler для обработки расширений маршрутизации.

  • MyController / Details / 14 -> возвращает представление html
  • MyController / Details / 14.json -> возвращает представление json
  • MyController / Details / 14.xml -> xml view

и в классе контроллера я бы сделал что-то вроде этого псевдокода phpish:

Details(id)
{
    $data = $this->MyController->findById(id);

    if($this->requestType == "json")
    {
        respondAs("json");
    }
    else if($this->requestType == "xml")
    {
        respondAs("xml");
    }
    else
    {
        //does default - html view
    }

    $this->setViewVariable("data", $data);
}

Кто-нибудь сможет дать мне несколько советов, которые помогут сделать нечто подобное с MVC3?

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Вы можете передать значение маршрута вместе с идентификатором MyController/Details/14/xml

Вам необходимо изменить маршруты, чтобы сделать это следующим образом:

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

Тогда в вашем HomeController ваше действие будет выглядеть примерно так:

public ActionResult Index(int id, string type)
{
   if(type == "json")
      return View("JsonView");

   //etc
}

Очевидно, вам необходимо правильно проверить значение type для null или что у вас есть

1 голос
/ 25 октября 2011
...