Что такое эквивалент WebApi [FromUri] в ASP.NET MVC?
в WebApi я могу украсить параметр действия контроллера с помощью [FromUri]
чтобы компоненты URI "десериализовались", если хотите, в модель POCO; aka model-binding.
несмотря на использование MVC с 2.0, Я никогда не использовал его для веб-сайтов (не знаю почему). В чем его эквивалент? ASP.NET MVC 5?
атрибут, похоже, не распознается в IDE, если мне не нужно ссылаться на библиотеку.
Я хочу ~/thing/2014/9
для привязки к модели ниже:
public class WhateverModel
{
public int Year { get; set; }
public int Month { get; set; }
}
спасибо
обновление
в другом вопросе (ссылка выше) ОП говорит:
однако переключите это на простой MVC не WebApi, и связыватель модели по умолчанию сломается и не сможет связать свойства объектов во вложенном массиве
что означает, что он использует атрибут из WebApi. Я думаю. У меня нет этих ссылок, потому что я в MVC, поэтому (ab)использует версию WebApi принятый способ сделать это в MVC?
обновление 2
в ответе на этот вопрос:
вам нужно построить строку запроса, соблюдая соглашения об именах связывателя модели MVC.
дополнительно
[FromUri]
атрибут в вашем примере действия полностью игнорируется, так как он не известен MVC DefaultModelBinder
так что я все еще не знаю, что делать или что на Земле ОП даже говорил об этом вопрос, если он добивался успеха с неправильным атрибутом.
думаю, я надеюсь на ясный ответ, а не на грязь этого другого вопроса.
1 ответов
это будет просто работать™:
[HttpGet]
public ActionResult Thing(WhateverModel model)
{
// use model
return View();
}
по крайней мере, при использовании URL /thing?Year=2014&Month=9
.
проблема в маршрутизации. URL-адрес /thing/2014/9
не будет отображать маршрут по умолчанию MVC, так как это /{controller}/{action}/{id}
, где {id}
является необязательным int
.
проще всего было бы использовать маршрутизацию атрибутов:
[HttpGet]
[Route("/thing/{Year}/{Month}"]
public ActionResult Thing(WhateverModel model)
{
// use model
return View();
}
это сопоставит URL-адрес вашей модели.