[英]$http Call to Web API 2 Not Passing Parameter
這是我的C#WebAPI2控制器,受到了打擊:
[HttpGet, Route("bycaseidlist/{idArray}")]
public async Task<IHttpActionResult> GetByCaseIdList([FromUri] List<int> idArray)
這是電話:
var idArray = [4,4,2,4];
var url = baseUrl + 'api/cases/bycaseidlist/' + idArray ;
$http.get(url)
問題在於API無法獲取數組,而是獲取...這:
換句話說,一個值只有一個數組:0。為什么會這樣? 我如何解決它? 似乎與這個答案相符 ,但這是行不通的。 我應該把它傳遞到體內嗎? 我覺得我缺少明顯的東西。
Get ActionMethods可以將對象作為參數。 但是,默認行為是在參數不是.net原語時查看正文。 為了強制操作方法使用模型綁定器從請求中讀取對象數據,可以使用[FromUri]或[ModelBinder]屬性修飾該參數。 (請注意,還有其他方法可以執行此操作,其中包括執行參數綁定規則,但這可能對您在此處試圖完成的工作而言是過高的選擇)。 這是一個解決您原來提出的問題的實現。
<script type="text/javascript">
var ajaxCall = function (myArry) {
var ajaxProperties = {};
ajaxProperties.url = "/api/Mul/Mutiply";
ajaxProperties.type = "Get";
ajaxProperties.data = {};
ajaxProperties.data.numbers = myArry;
ajaxProperties.contentType = "application/json";
console.log(ajaxProperties);
ajaxProperties.success = function (data) {
console.log(data);
}
ajaxProperties.error = function (jqXHR) {
console.log(jqXHR);
};
$.ajax(ajaxProperties);
};
var getData = function (e) {
var myArry = new Array();
myArry.push($('input[name=num1').val());
myArry.push($('input[name=num2').val());
ajaxCall(myArry);
return false;
};
</script>
調節器
[HttpGet]
public IHttpActionResult Multiply([FromUri] int[] numbers)
{
int result = 0;
if(numbers.Length > 0)
{
result = 1;
foreach (int i in numbers)
{
result = result * i;
}
}
return Ok(result);
}
}
我認為我的錯誤是使用Get。 我可能記錯了(有人確認您是否是副手),但Get可能無法將對象作為參數。 無論如何,我將方法更改為POST,然后更改了要在請求正文(而不是url)中發送的參數。 現在可以使用了。 這是工作代碼:
[HttpPost, Route("bycaseidlist")]
public async Task<IHttpActionResult> PostByCaseIdList([FromBody] int[] sqlCaseIdArray)
以及通話本身:
function runDbCall(url, sqlCaseIdArray){
return $http({
method: 'POST',
url: url,
data: sqlCaseIdArray
});
}
runDbCall(url, sqlCaseIdArray)
當我弄清楚問題是否出在“不能拿東西”這個問題上時,我會回到這個問題上,但是我認為可以在網址中,而不能在正文中……需要澄清。 如果有人在那部分上發布答案,我會接受的,因為這可能是問題的根源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.