2

我正在构建一个 ASP.NET Web API REST 服务。

我必须处理的调用(URL)由另一方修复,并且有许多查询字符串参数。

与其让我的控制器采用十几个参数,有什么方法可以将查询参数映射到一个对象并将其传递给控制器​​?

我知道我可以通过 GetQueryNameValuePairs 在控制器中访问它们,但我想知道是否有办法以这种方式使用数据绑定。

4

3 回答 3

2

是的,

定义一个模型,例如:

public class InputModel
{
    public string Param1 { get; set; }
    public string Param2 { get; set; }
}

然后调整你的动作:

public HttpResponseMessage Put(InputModel model) { ... }

很像 MVC,API 控制器支持模型绑定,有一个基础设施来处理这个,它本身是可扩展的。我会在谷歌上搜索 ASP.NET MVC 模型绑定的示例。

于 2012-08-31T09:28:02.590 回答
2

将模型对象传递给控制器​​时,ASP.NET Web API 似乎需要使用 [FromUri]。例如:

public HttpResponseMessage Post([FromUri] MyModel model) { ... }

有关详细信息,请参阅此MSDN 博客文章

于 2012-09-01T16:02:17.577 回答
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);
    }
}
于 2012-08-31T10:02:13.270 回答