我有一个具有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),
答案 0 :(得分:0)
多个[FromBody]属性无法按in the documentation here所述进行操作。
// Caution: Will not work!
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }
此规则的原因是请求正文可能存储在 非缓冲流,只能读取一次。
This blog指定有3种简单的方法可以实现此目的:
同时使用POST和GET(一个参数来自查询字符串,另一个参数来自查询字符串)
创建1个将所有值封装在单个模型中的模型
使用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