将逗号分隔列表绑定到 asp.net web api 中的列表 <int>

Binding a comma separated list to a List<int> in asp.net web api

web 中的默认活页夹 api expecst

http://url.com/webapi/Report/?PageIds=3243&PageIds=2365

绑定到

public IHttpActionResult Report(List<int> PageIds){ // exciting webapi code}

我要绑定 http://url.com/webapi/Report/?PageIds=3243,2365

因为我 运行 在我的 URL 中 space 做一个 GET

我创建了一个 class public class CommaSeparatedModelBinder :

System.Web.Http.ModelBinding.IModelBinder
    {
        public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
        {
           //Binding in here
        }
     }

并在我的 WebApiConfig.cs

中注册了这个
 var provider = new SimpleModelBinderProvider(
           typeof(List<int>), new CommaSeparatedModelBinder());
            config.Services.Insert(typeof(ModelBinderProvider), 0, provider);

我已经更改了我的方法签名以像这样使用模型绑定器

 public IHttpActionResult Report( [ModelBinder] List<int> PageIds){ // exciting webapi code}

但是我的活页夹中的断点没有被击中(并且列表没有被绑定)。

我还需要配置什么?

确保遵循本文中的所有步骤:Parameter Binding in ASP.NET Web API

您似乎错过了最后一步:

With a model-binding provider, you still need to add the [ModelBinder] attribute to the parameter, to tell Web API that it should use a model binder and not a media-type formatter. But now you don’t need to specify the type of model binder in the attribute:

   public HttpResponseMessage Get([ModelBinder] GeoPoint location) { ... }

此外,我从未尝试绑定到 List<int>。您可能无法对其进行建模绑定,因为它是内置类型。如果是这样,只需将其与自定义 class 类型框起来,并确保将 [ModelBinder] 属性添加到 class.

或....

更好的解决方案:KISS

public IHttpActionResult Report(string PageIds)
{
     var ids = PageIds.Split(',');
     // exciting web api code and/or more robust checking of the split
}