c# - 调用具有 2 个参数的 WebAPI 控制器操作
问题描述
我有一个具有 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),
解决方案
POST 参数上的多个 [FromBody] 属性将无法正常工作,如此处文档中所述。
// Caution: Will not work!
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }
此规则的原因是请求正文可能存储在只能读取一次的非缓冲流中。
此博客指定有 3 种简单的方法可以实现此目的:
同时使用 POST 和 GET(一个参数来自查询字符串的另一个参数)
创建 1 个模型,将所有值封装在单个模型中
使用 JSON.Stringify 将单个 JSON 传递给 API,然后使用 JObject 作为 web api 中的参数。然后在 web api 中解析 JSON。
还有一个选项 - 您还可以使用文档中提到的 IModelBinder 创建自定义活页夹:https ://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/参数绑定在-aspnet-web-api
推荐阅读
- bonobo - Bonobo git 服务器是否支持 web hooks
- arrays - 当两个连续行之间的差异超过阈值时,如何在 Matlab 中删除矩阵的行?
- docker - 如何在 $ 之前更改命令提示符文本的字体颜色
- javascript - 散景:使用 2 个交互式小部件通过 CustomJS 过滤数据集
- python - 创建新列,计算一行中有多少条目满足 pandas 中数据框每一行的条件
- airflow - Apache Airflow:执行程序报告任务实例已完成(失败),尽管任务说它已排队
- excel - VBA:如何使用对象浏览器?
- java - 如何为两个玩家编程掷骰子
- asp.net - 如何使用 Azure DevOPs Pipeline 构建和发布 .Net 网站
- postgresql - 将数据从 .txt 文件导入数据库的过程