将逗号分隔列表绑定到 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
}
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
}