我有一个WebAPI方法,它接受3个参数,其中两个是原始数据类型,第三个是复杂数据类型:
public HttpResponseMessage validateUser(string elementName, string checkPermission, List<AccessElement> accessGroups)
我正在使用Angular $http
调用此WebAPI:
return $http({
method: 'get',
url: serviceUrlPrefix + '/api/v1/validateUser',
params: { 'elementName': CONSTANTS.UNAUTH_DATA_UI, 'checkPermission': CONSTANTS.CAN_READ , 'accessGroups': accessGroups }
})
问题:
发出$http
请求时,查询字符串值将被截断,因为复杂数据类型参数accessGroups
相对较长。我在其中一个博客中读到IE中查询字符串限制是2083个字符
问题1:
在我的场景中,我不会说acessGroups
对象太大,因为它是10个记录的集合(有4列)。由于每个浏览器都有查询字符串限制,因此当我们传递复杂数据类型时,我很容易理解这种截断。因此,如果是这种情况,我想了解[FromUri]
的主要用途是什么。
问题2: 通过将控制器方法设为
,我能够解决这个问题public HttpResponseMessage validateUser(string elementName, string checkPermission, [FroimUri]List<AccessElement> accessGroups)
使用“data”参数
对此方法进行POST调用 return $http({
method: 'post',
url: serviceUrlPrefix + '/api/v1/validateUser',
params: { 'elementName': CONSTANTS.UNAUTH_DATA_UI, 'checkPermission': CONSTANTS.CAN_READ },
data: { 'accessGroups': accessGroups }
})
这种方法有什么缺点,因为我要从普通的“Get”中选择“POST”方法。它会导致任何额外的开销吗?
答案 0 :(得分:0)
我相信唯一的缺点是不遵守REST
设计原则(应使用POST
根据REST
范式创建资源)。
实际上,我将使用[FromBody]
标签。这样,您可以确定不会遇到任何长度限制。