Что эквивалент WebApi [FromUri] в ASP.NET MVC?
В WebApi я могу украсить параметр в действии контроллера с помощью [FromUri]
, чтобы компоненты URI "десериализовались", если вы хотите, в модель POCO; aka привязка модели.
Несмотря на использование MVC с версии 2.0, я никогда не использовал его для веб-сайтов (не знаю почему). Что эквивалентно ему в ASP.NET MVC 5?
Атрибут, похоже, не распознается в среде IDE, если мне не нужно ссылаться на библиотеку.
Мне бы хотелось, чтобы ~/thing/2014/9
связывался с приведенной ниже моделью:
public class WhateverModel
{
public int Year { get; set; }
public int Month { get; set; }
}
Спасибо
Update
В другом вопросе (ссылка выше) OP говорит:
Однако переключите это на обычный 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-адрес вашей модели.