我想将一组字符串传递给API端点:
[HttpGet]
public DashboardSectionViewModel GetDashboard(
DateTime lowerBound,
DateTime upperBound,
[FromUri] List<string> excludedStores = null,
[FromUri] List<string> excludedItems = null)
{
//Code
}
这是我拨打电话的地方:
$.ajax({
url: App.Services.updateUrl + src.updateUrl,
type: "GET",
data: {
lowerBound: self.slideFilter.lowerBoundDisplay(),
upperBound: self.slideFilter.upperBoundDisplay(),
excludedStores: self.storeFilter.excludedStores(),
excludedItems: self.experienceFilter.excludedItems()
}
});
当两个集合项不是参数且AJAX请求未传递时,它可以正常工作。当我最初使用IEnumerable<string>
并且更改为List<string>
时,它无法正常工作。我是否需要为此设置自定义路由?口译员会得到DateTime
但不会IEnumerable<T>
吗?
编辑:这是通过传递空集合生成的URL:
(标题)/ API / ContentApi / GetDashboard下界= 10-12安培; UPPERBOUND = 10-23
以下是通过传递的一些集合项生成的URL:
(标题)/ API / ContentApi / GetDashboard下界= 10-10&安培; UPPERBOUND = 10-23&安培; excludedStores%5B%5D =你好&安培; excludedStores%5B%5D =世界&安培; excludedExperiences%5B%5D =你好&安培; excludedExperiences %5B%5D =世界
我认为这是序列化问题,但我不确定。
答案 0 :(得分:1)
为了使web api绑定到您的操作参数,您的查询应如下所示:
?lowerBound=10-12&upperBound=10-20&excludedStores=hello&excludedStores=world&excludedItems=hello&excludedItems=world
这将绑定到您的操作中的参数:
public DashboardSectionViewModel Get(DateTime lowerBound, DateTime upperBound, [FromUri]List<string> excludedStores = null, [FromUri]List<string> excludedItems = null)
要创建查询,您必须调用$.param()
,然后替换url encoded []字符。像这样:
var query = $.param({
lowerBound: '10-12',
upperBound: '10-20',
excludedStores: ['hello', 'world'],
excludedItems: ['hello', 'world']
}).replace(/%5B%5D/g, '')
$.ajax({
url: App.Services.updateUrl + src.updateUrl + '?' + query,
type: "GET"
});