我正在构建一个ASP.NET Web API REST服务。
我必须处理的调用(URL)由另一方修复,并且有许多查询字符串参数。
有没有办法将查询参数映射到对象并将其传递给控制器,而不是让我的控制器使用十几个参数?
我知道我可以通过GetQueryNameValuePairs在控制器中访问它们,但我想知道是否有办法以这种方式使用数据绑定。
答案 0 :(得分:2)
是,
定义模型,例如:
public class InputModel
{
public string Param1 { get; set; }
public string Param2 { get; set; }
}
然后调整你的行动:
public HttpResponseMessage Put(InputModel model) { ... }
与MVC非常相似,API控制器支持模型绑定,有一个基础设施来处理它,它本身是可扩展的。我想去看看ASP.NET MVC Model Binding的例子。
答案 1 :(得分:2)
在将模型对象传递给控制器时,ASP.NET Web API似乎需要使用[FromUri]。例如:
public HttpResponseMessage Post([FromUri] MyModel model) { ... }
有关详细信息,请参阅此MSDN blog post。
答案 2 :(得分:1)
我只想创建一个查询字符串解析器:
protected IDictionary<string, string> GetQueryParameters(string queryString)
{
var retval = new Dictionary<string, string>();
foreach (var item in queryString.TrimStart('?').Split(new[] {'&'}, StringSplitOptions.RemoveEmptyEntries))
{
var split = item.Split('=');
retval.Add(split[0], split[1]);
}
return retval;
}
然后从控制器调用:
public class DummyController : ApiController
{
[HttpGet]
public string SayHello(string name="")
{
var q = GetQueryParameters(Request.RequestUri.Query);
return string.Format("Hello {0}", name);
}
}