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

时间:2016-11-14 17:03:32

标签: c# asp.net asp.net-web-api model-binding

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

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

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

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

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

希望它有所帮助。