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;
    }
}

任何想法?

谢谢

Web API模型在复杂类型中绑定CSV

不知道,如果这太简单了,但作为参数值"1,2,3"只能(afaik)作为字符串传递,您可以使用string.Split将值转换为int数组:

var userIds = Array.ConvertAll(parm.Split(','), int.Parse);

当然,当并非所有以逗号分隔的值都是数字时,有可能遇到FormatException,因此您最好使用多行代码进行转换。

希望能有所帮助。