这是我的 C# WebAPI2 Controller ,它受到攻击:
[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 没有获取数组,它获取的是...this:
换句话说,数组只有一个值:0。为什么会发生这种情况?我如何解决它?似乎符合this answer ,但它不起作用。我应该把它传递到体内吗?我觉得我错过了一些明显的东西。
最佳答案
Get ActionMethods 可以将对象作为参数。但是,当参数不是 .net 原语时,默认行为是查看主体。为了强制操作方法使用模型绑定(bind)器从请求中读取对象数据,可以使用 [FromUri] 或 [ModelBinder] 属性来修饰该参数。 (请注意,还有其他方法可以执行此操作,包括执行参数绑定(bind)规则,但这对于您在此处尝试完成的任务来说可能有点过头了)。这是一个解决您提出的原始问题的实现。
<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>
Controller
[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);
}
}
关于javascript - $http 调用 Web API 2 不传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34183619/