如何让asp.net webapi查看路由数据和正文以绑定到复杂对象?
使用以下路线“api / products / {productid} / manufacturers / {manufacturerId}”我需要将productId和manufacturerId绑定到模型,所以我的控制器方法是
public IHttpActionResult Create(CreateProductManufacturerModel
createProductManufacturerModel)
我的模特是
public class CreateProductManufacturerModel
{
public int ProductId { get; set; }
public int ManufacturerId { get; set; }
public bool IsDefault { get; set; }
public string ManufacturerCode { get; set; }
public string Description { get; set; }
}
我知道我可以将我的方法更改为如下,但我使用fluentvalidation来验证整个createproductmanufacturermodel,这是自动完成的(请参阅 - http://www.justinsaraceno.com/2014/07/fluentvalidation-with-webapi2/)。因此,productId和manufacturerId将无法正确验证,因为它们被设置为零。
public IHttpActionResult Create(int productId, int manufacturerId, CreateProductManufacturerModel
createProductManufacturerModel)
我已经尝试了一个模型绑定器,但它不会自动触发流畅的验证。不太确定这是否重要,但发布的正文是json格式。
提前致谢。
保
答案 0 :(得分:1)
System.Web.Http.Filters.ActionFilterAttribute
。OnActionExecuting()
actionContext.RequestContext.RouteData.Values
actionContext.ActionArguments
如果这是一个不太具体的用例,您可以使用反射根据参数名称将路由数据分配给模型属性。
答案 1 :(得分:0)
您可以将行动签名更改为:
public IHttpActionResult Create([FromBody]CreateProductManufacturerModel
createProductManufacturerModel){}
然后验证您需要的2个值:createProductManufacturerModel.ProductId和createProductManufacturerModel.ManufacturerId?