繁体   English   中英

$ http对Web API 2的调用未传递参数

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM