AngularJS $http ajax 无法使用 asp.net 网络 api 调用

AngularJS $http ajax not working on asp.net web api call

我有一个简单的 AngularJS ajax 调用如下。

    $scope.modelObject.sendRequest = function (requestType) {
        var dataTemp = { first: 7, second: 3 } ;
        alert($httpParamSerializer(dataTemp));
        $http({
            url: '/api/bindings/sumnumbers',
            data: $httpParamSerializer(dataTemp),
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
        }
        ).success(function () {});
    }

在另一端,我有一个 Web api BindingsController,其 sumnumbers 操作方法如下。

    [HttpGet]
    [HttpPost]
    public async Task<IHttpActionResult> SumNumbers() {
        if (Request.Content.IsFormData()) {
            NameValueCollection jqData = await Request.Content.ReadAsFormDataAsync();
            int firstValue, secondValue;
            if (TryGetValues(jqData, "first", "second", out firstValue,
                out secondValue)) {
                return Ok(firstValue + secondValue);
            } else if (TryGetValues(jqData, "value1", "value2", out firstValue,
                out secondValue)) {
                return Ok(firstValue - secondValue);
            }
        }
        return StatusCode(HttpStatusCode.BadRequest);
    }

javascript 代码 alert($httpParamSerializer(dataTemp)); 中的警报正确显示了数据。 我在action方法中打了一个断点,表明调用成功。但问题是 TryGetValues(jqData ... 无法获取任何值。看到 AllKeys 属性 of jqData(NameValueCollection),根本没有任何键! !. 有人可以建议我错过了什么吗?

这是我这边的一个小错误。只需添加

method:'Post'

在调用内部,因此调用变为

        $http({
            method:'Post',
            url: '/api/bindings/sumnumbers',
            data: $httpParamSerializer(dataTemp),
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
        }

我用 fiddler 找到了这个。