如何在 WebAPI 中将可变数量的参数传递给 GET

本文关键字:参数传递 GET WebAPI | 更新日期: 2023-09-27 18:35:09

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
public HttpResponseMessage Get( string where_name, 
                                IndexFieldsModel index_fields = null )
public class IndexFieldsModel
{
    public List<IndexFieldModel> Fields { get; set; }
}
public class IndexFieldModel
{
    public string Name { get; set; }
    public string Value { get; set; }
}

这是我的 API。 我的问题是index_fields是名称值对的集合,它是可选的且长度可变。 问题是我不知道将提前传递给我的 GET 方法的名称。 一个示例调用是:
/api/workitems?where_name=workitem&foo=baz&bar=yo

IModelBinder是要走这条路,还是有更简单的方法? 如果是 IModelBinder,如何遍历名称? 我去这里看了IModelBinder的例子:http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api但是我看不到一种方法可以遍历名称并挑选出"foo"和"bar"。

我尝试将index_fields更改为Dictionary<string, string>并且没有IModelBinding,但这没有任何作用:index_fields为空。 当我执行 IModelBinder 并调试我的 IModelBinder.BindModel 例程时,如果我向下钻取到 ModelBindingContext 对象,我可以看到System.Web.Http.ValueProviders.Providers.QueryStringValueProvider中的"foo"和"bar"值,但我不知道如何使用它。 我尝试从头开始创建一个QueryStringValueProvider,但它需要一个HttpActionContext。 同样,我看不到循环访问键以获取"foo"和"bar"的方法。

顺便说一句:我正在使用VS2012

如何在 WebAPI 中将可变数量的参数传递给 GET

您可以简单地循环访问查询参数

public ActionResult Method()
{
    foreach(string key in Request.QueryString) 
    {
        var value = Request.QueryString[key];
    }
}