Web API模型在复杂类型中绑定CSV
本文关键字:绑定 CSV 类型 复杂 API 模型 Web | 更新日期: 2023-09-27 18:18:03
我的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...
}
我希望userid作为逗号分隔的列表传递:
http://foo.com/api/things?UserIds=1,2,3
但是,作为Web API,它期望:
http://foo.com/api/things?UserIds=1&UserIds=2&UserIds=3
有简单的方法来解决这个问题吗?我看到我可以创建自定义Model Binder,但是对于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;
}
}
任何想法?
谢谢
不知道,如果这太简单了,但作为参数值"1,2,3"只能(afaik)作为字符串传递,您可以使用string.Split
将值转换为int数组:
var userIds = Array.ConvertAll(parm.Split(','), int.Parse);
当然,当并非所有以逗号分隔的值都是数字时,有可能遇到FormatException,因此您最好使用多行代码进行转换。
希望能有所帮助。