在MVC4 Web Api中等效于[Bind(Prefix ="principalId")]?

dia*_*aho 12 asp.net-mvc asp.net-mvc-routing asp.net-web-api

背景:

在MVC3中,我使用以下语法指定自定义Action参数名称:

public ActionResult ActionName([Bind(Prefix = "principalID")] int userID,
                               [Bind(Prefix = "dependentID")] long applicationID)
Run Code Online (Sandbox Code Playgroud)

此操作的路由定义如下(ActionNameConstraint是自定义IRouteConstraint):

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

题:

BindAttribute是一System.Web.Mvc堂课.Web Api中是否存在相当于此(参数绑定)的内容?

当然,如果有其他解决方案可以达到相同的效果,我很乐意听到它们!

Ste*_*ble 5

您可以使用该System.Web.Http.FromUriAttribute属性指定用于模型绑定的参数名称.

public ActionResult ActionName(
                    [FromUri(Name = "principalID.userID")] int userID,
                    [FromUri(Name= "dependentID.applicationID")] long applicationID
                    )
Run Code Online (Sandbox Code Playgroud)

FromUri告诉模型绑定检查查询字符串和RouteData请求.


Mel*_*igy -2

据我所知,在 WebAPI 中,您只需使用特殊的控制器类基和特殊的操作名称,但毕竟它们仍然是控制器和操作。

你尝试过但没有成功吗?快速浏览一下这篇文章似乎表明模型绑定一般(但不是特定属性)应该正常工作:

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

编辑:

有人说这只适用于 MVC,并否决了答案。来吧,更多参考: