如何在 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
您可以简单地循环访问查询参数
public ActionResult Method()
{
foreach(string key in Request.QueryString)
{
var value = Request.QueryString[key];
}
}