ASP.NET WebAPI FromUri URL限制

时间:2015-09-15 14:15:57

标签: asp.net-web-api2

我有一个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”方法。它会导致任何额外的开销吗?

1 个答案:

答案 0 :(得分:0)

我相信唯一的缺点是不遵守REST设计原则(应使用POST根据REST范式创建资源)。
实际上,我将使用[FromBody]标签。这样,您可以确定不会遇到任何长度限制。