[英]$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.