如何将非字符串相关数据传递到get请求web api中

时间:2017-06-12 10:46:23

标签: angular http asp.net-web-api

我从一个角度2应用程序调用asp.net mvc web api控制器动作。我可以接受来自呼叫的对象:

    [Route("api/getItems")]
    [HttpPost]
    public ReturnObject GetItems(DateRangeVM dateRange){
    }

然而,我不想做一个帖子,我希望它是一个获取,所以当我从角度2调用它时,我想要这样的东西:

return this.http.post(this.API_URL_BASE + '/api/getItems', dateRange, defaultOptions).map((response: Response) => {
      return <any[]>response.json();
    }).catch(this.handleError);
  }

但实际上更像是这样:

return this.http.get(this.API_URL_BASE + '/api/getItems', dateRange, defaultOptions).map((response: Response) => {
      return <any[]>response.json();
    }).catch(this.handleError);
  }

但是,最后一个选项不接受数据作为第二个选项。我不想将数据作为字符串参数传递,因为当数据变得更复杂时,这太乱了。

2 个答案:

答案 0 :(得分:0)

我知道这并没有完全回答你的问题,但这就是我如何解决类似的问题......

以下是用户控制器示例。此方法旨在返回所有用户或与指定开始日期匹配的任何用户。

public IEnumerable<User> Get(DateTime? startDate = null)
{
    return _userRepo.Get(startDate);
}

在角度服务中,我定义了以下内容:

function getUsers(startDate) {
    var users = $http({
        method: 'get',
        url: config.remoteServiceName +'users/',
        params: {
            startDate: startDate
        }
    }).then(function (response) {
        var values = [];
        angular.forEach(response.data, function (value) {             
            values.push(User.apiResponseTransformer(value));
        });
        return values;
    }).catch(function (errorResponse) {
        throw errorResponse;
    });

    return users;
}  

以下是已回答的另一个SO问题的链接,该问题提供了有关在GET上使用请求正文的原因的一些信息:

Read content body from a HTTP GET in C# WebAPI

祝你好运!

答案 1 :(得分:0)

使用FromUri属性将查询字符串绑定到复杂对象。 Angular需要将类的每个属性作为查询字符串参数发送。

public ReturnObject GetItems([FromUri] DateRangeVM dateRange){
}