调用具有2个参数的WebAPI控制器操作

时间:2019-01-14 17:52:32

标签: c# jquery asp.net asp.net-web-api asp.net-web-api2

我有一个具有2个参数的WebAPI控制器动作。 我怎么称呼这个动作?

使用一个参数,我的代码运行良好。 如何调用具有2个参数的WebAPI? 我尝试了几种方法,但没有用。 我有一个具有2个参数的WebAPI控制器动作。 我怎么称呼这个动作?

使用一个参数,我的代码运行良好。 如何调用具有2个参数的WebAPI? 我尝试了几种方法,但没有用。

预先感谢

//With a single parameter it works good:
[Route("api/Controller/GetAllVendors")]
[HttpPost]
public IEnumerable<Vendor> GetAllVendors(LoginParameters loginParam)
{
}

function LoadVendorLkup() {
    alert("InVendorCall");
    var loginPar = {
    UserName: 'user1',
    CompanyID: 'company1',
    ProgramID: ''
}
$.ajax({
    type: 'POST',
    url: '/api/Controller/GetAllVendors',
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(loginPar), 

/////////////////////////////////////////////////////////////////////////
//With 2 parameters , it does not work:

[Route("api/Controller/GetVendorsForSelectedHouseholdID")]
[HttpPost]
public IEnumerable<Vendor> GetVendorsForSelectedHouseholdID(LoginParameters loginParam, string hHoldID)
{
}

function LoadVendorLkupForSelectedHousehold() {
    var hHoldtext = $('#txtHHold').val();
    var loginPar = {
    UserName: 'user1',
    CompanyID: 'company1',
    ProgramID: ''
}
 $.ajax({
    type: 'POST',
    url: '/api/controller/GetVendorsForSelectedHouseholdID',
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(loginPar), 'hHoldID': hHoldtext,
//////////////////////////////////////////////////////

//I also tried the following:
[Route("api/controller/GetVendorsForSelectedHouseholdID/{hHoldID:String}")]
[HttpPost]
public IEnumerable<Vendor> GetVendorsForSelectedHouseholdID([FromBody()]LoginParameters loginParam,[FromUri()]string hHoldID)
{
}

function LoadVendorLkupForSelectedHousehold() {
    alert("InVendorCall2");
    var hHoldtext = $('#txtHHold').val();
    alert("Household:" + hHoldtext);
    var loginPar = {
    UserName: 'user1',
    CompanyID: 'company1',
    ProgramID: ''
}
$.ajax({
    type: 'POST',
    url: '/api/controller/GetVendorsForSelectedHouseholdID?hHoldID='+ hHoldtext,
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(loginPar), 

1 个答案:

答案 0 :(得分:0)

POST参数上的

多个[FromBody]属性无法按in the documentation here所述进行操作。

// Caution: Will not work!    
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }
  

此规则的原因是请求正文可能存储在   非缓冲流,只能读取一次。

This blog指定有3种简单的方法可以实现此目的:

  1. 同时使用POST和GET(一个参数来自查询字符串,另一个参数来自查询字符串)

  2. 创建1个将所有值封装在单个模型中的模型

  3. 使用JSON.Stringify将单个JSON传递给API,然后将JObject用作Web api中的参数。然后在网络API中解析JSON。

还有一个选项-您还可以使用IModelBinder创建自定义资料夹,如文档中所述:https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api