我的ASP.NET Web API类有一个GET端点,它有各种过滤器,它们从URI映射到过滤器类:
控制器:
public IHttpActionResult List([FromUri] FilterModel filter)
过滤类:
public class FilterModel {
public int Something {get;set;}
public int[] UserIds {get;set;}
...lots of other properties...
}
我想将UserIds作为逗号分隔列表传递:
http://foo.com/api/things?UserIds=1,2,3
但是,这是Web API,它期望:
http://foo.com/api/things?UserIds=1&UserIds=2&UserIds=3
有没有一种简单的方法可以解决这个问题。我看到我可以创建一个自定义模型绑定器,但对于99%的模型绑定,我不想改变任何东西。我理想的解决方案是这样的:
public class CustomModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
// Access the "default" model that's created from the Uri params
var model = ???
// Then do some work to bind the UserIds
return true;
}
}
有什么想法吗?
由于
答案 0 :(得分:0)
不知道,如果这太简单了,但是作为参数值“1,2,3”可以(afaik)只能作为字符串传递,你可以使用string.Split
转换值(s)到int数组:
var userIds = Array.ConvertAll(parm.Split(','), int.Parse);
当然,有可能遇到FormatException,当并非所有逗号分隔值都是数字时,所以你最好用多行代码进行转换。
希望它有所帮助。