Эквивалент [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 и отклонять ответ. Здесь вы найдете больше ссылок: