Что эквивалент 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-адрес вашей модели.