我从一个角度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);
}
但是,最后一个选项不接受数据作为第二个选项。我不想将数据作为字符串参数传递,因为当数据变得更复杂时,这太乱了。
答案 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上使用请求正文的原因的一些信息:
祝你好运!答案 1 :(得分:0)
使用FromUri属性将查询字符串绑定到复杂对象。 Angular需要将类的每个属性作为查询字符串参数发送。
public ReturnObject GetItems([FromUri] DateRangeVM dateRange){
}