将几个参数发布到WebApi控制器

时间:2016-05-16 14:37:48

标签: asp.net angularjs asp.net-web-api2

我正在使用angular并希望将id int和一个字符串从客户端传递给web api控制器。我可以让它工作的唯一方法是在接收方法中使用类作为参数,该类具有可以映射到正在发布的数据的属性。创建一个新类只接收两个参数,例如通过将一个对象添加到它拥有的集合中来更新对象,这似乎是非常低效的。所以我试图发送一个新的字符串集合应该广告,以及拥有该集合的对象的id。

Web Api控制器

[Route("addEquipment")]
[HttpPost]
public void AddEquipment(AddNinjaEquipmentPost newEquipment)
{

    //This works
}

public struct AddNinjaEquipmentPost
{
    public int Id { get; set; }
    public string NewEquipment { get; set; }
}

但我希望有像

这样的东西
[Route("addEquipment")]
[HttpPost]
public void AddEquipment(FormDataCollection data)
{

    //id = data["id"]
    //newEquipment = data["newEquipment "]
}

或类似

[Route("addEquipment")]
[HttpPost]
public void AddEquipment(int id, string newEquipment )
{

}

2 个答案:

答案 0 :(得分:0)

不幸的是,Web API无法开箱即用地处理此请求。但是通过创建自定义参数绑定存在一种解决方法:custom parameter binder

对于我之前的情况:
我发送了Math.round()JObject方法,而不是创建自定义活页夹。

从我的例子:

webApi

如果提供另一个更好的答案,我也有兴趣改进我的代码:)

答案 1 :(得分:0)

有关...

[Route("addEquipment")]
[HttpPost]
public void AddEquipment(int id, string newEquipment )
{

}

您可以在查询字符串中发布该值。

POST http://localhost:1234/api/Equipment/addEquipment?id=1&newEquipment=Weights

如果您想要请求正文中的值而不是查询字符串中的值,还有其他一些方法可以执行此操作。