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

时间:2012-04-26 23:31:37

标签: asp.net-mvc asp.net-web-api asp.net-mvc-routing

背景

在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}
    );

问题:

BindAttributeSystem.Web.Mvc类。 Web Api中是否存在等效的(参数绑定)?

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:-2)

据我所知,在WebAPI中你只使用特殊的控制器类库和特殊的Action名称,但它们仍然是控制器和动作。

你尝试过它并没有用吗?快速浏览一下这篇文章似乎建议模型绑定一般(不是特定的属性)应该正常工作:

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

修改

有人说这应该仅适用于MVC而且还有助于回答。在这里,更多参考资料: