【问题标题】:posting to an api with integer parameter not working with angularJs发布到带有整数参数的 api 不适用于 angularJs
【发布时间】:2017-06-16 19:02:30
【问题描述】:

我试图发布到一个接受整数参数的 api,如下所示

 function getDailyErrors() {
            var uri = "/api/users/error-counts/";
            var inData = { numberOfDays : 5}
            return $http.post(uri, inData)
                .then(function (response) {
                    return response.data;
                });
        }

API

 [HttpPost]
        [Route("api/users/error-counts/")]
        public MultiCategorySeriesDto<int> GetErrorCounts(int numberOfDays=15)
        {
            return _uow.Events.Errors(numberOfDays);
        }

由于某些原因,API 不接受我传递的参数,而是采用默认的 int 参数。 我可以知道错误在哪里吗?

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及重现它所需的最短代码在问题本身。没有明确的问题陈述的问题对其他读者没有用处。请参阅:如何创建minimal reproducible example

标签: angularjs asp.net-web-api http-post


【解决方案1】:

尝试使用视图模型:

public class MyViewModel
{
    public int NumberOfDays { get; set; }
}

您的控制器操作将作为参数:

[HttpPost]
[Route("api/users/error-counts/")]
public MultiCategorySeriesDto<int> GetErrorCounts(MyViewModel model)
{
    return _uow.Events.Errors(model.NumberOfDays);
}

【讨论】:

    【解决方案2】:

    由于这是一个 POST,请尝试在参数上使用 [FromBody] 属性,让模型绑定器知道在哪里查找数据

    [HttpPost]
    [Route("api/users/error-counts/")]
    public MultiCategorySeriesDto<int> GetErrorCounts([FromBody]int numberOfDays = 15)
    {
        return _uow.Events.Errors(numberOfDays);
    }
    

    【讨论】:

    • 它接受可选参数吗?因为我得到了异常"Optional parameter 'numberOfDays' is not supported by 'FormatterParameterBinding'."
    【解决方案3】:

    下面的代码对我来说很好,使用与您问题中发布的相同的 API 代码。

        global.Himanshu.ErrorServices.factory('errorcountservices', ['$q', '$http', function ($q, $http) {
        return {getDailyErrors: fucntion()  {
                var deffered = $q.defer();
                $http({
                    method: 'POST',
                    url:/api/users/error-counts/',
                    params: {
                        numberOfDays: 5
                    },                    
                }).then(function (response) {
                    deffered.resolve(response.data);
                },function (response) {
                    deffered.reject(response.data);
                })
                return deffered.promise;
            }}
    

    【讨论】:

      猜你喜欢
      • 2014-07-02
      • 1970-01-01
      • 2018-08-08
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多