Эквивалент [Bind (Префикс = "mainId" )] в MVC4 Web Api?

Фон:

В MVC3 я использовал следующий синтаксис для указания пользовательских имен параметров Action:

public ActionResult ActionName([Bind(Prefix = "principalID")] int userID,
                               [Bind(Prefix = "dependentID")] long applicationID)

Маршрут для этого действия был определен следующим образом (ActionNameConstraint является обычным IRouteConstraint):

routes.MapHttpRoute(
    "DependantAction",
    "{controller}/{principalID}/{action}/{dependentID}",
    new {controller = @"[^0-9]+", action = ActionNameConstraint.Instance, dependentID = RouteParameter.Optional}
    );

Вопрос:

BindAttribute - это класс System.Web.Mvc. Есть ли эквивалент этого (привязка параметра) в Web Api?

Конечно, если есть другие решения для достижения того же результата, я бы хотел их услышать!

Ответ 1

Вы можете использовать атрибут System.Web.Http.FromUriAttribute для указания имен параметров, используемых для привязки к модели.

public ActionResult ActionName(
                    [FromUri(Name = "principalID.userID")] int userID,
                    [FromUri(Name= "dependentID.applicationID")] long applicationID
                    )

FromUri указывает привязку модели для проверки строки запроса и RouteData для запроса.

Ответ 2

Я понимаю, что в WebAPI вы просто используете специальную базу классов контроллера и специальные имена Action, но все же это контроллеры и действия.

Вы пробовали, и это не сработало? Быстрый взгляд на эту статью, похоже, предполагает, что привязка модели вообще (а не конкретный атрибут) должна работать нормально:

http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

Edit:

Некоторые говорят, что это должно работать только с MVC и отклонять ответ. Здесь вы найдете больше ссылок: