【问题标题】:Model binding to Dictionary from URI in ASP.NET Web API模型从 ASP.NET Web API 中的 URI 绑定到字典
【发布时间】:2014-05-21 13:59:16
【问题描述】:

请参考 MVC 中的此链接:http://aspnetwebstack.codeplex.com/discussions/351011

我遇到了模型绑定问题。我从 JavaScript 向名为“/api/products”的 API 端点发出 GET Ajax 请求,传入一些参数,包括作为查询参数的分页和排序。这是完整的 URI:

http://localhost/api/products?page=1&count=10&filter[name]=Test1&filter[price]=10&sorting[name]=desc

在服务器端,我有一个从 URI 接受这些属性的 Web API 控制器:

public async IHttpActionResult Get([FromUri]Dictionary<string,string> filter, [FromUri]Dictionary<string,string> sorting, int count, int page)
{
        //...
}

“count”和“page”参数绑定完美,过滤器和排序绑定为字典的实例,但其计数为0。

我在 MVC 中得到了这个工作,但它似乎并没有在 Web API 中发挥作用。

【问题讨论】:

标签: c# javascript asp.net asp.net-web-api


【解决方案1】:

您仍然可以利用开箱即用的默认模型绑定器,您的 uri 看起来像

http://localhost/api/products?page=1&count=10&filter[0].key=name&filter[0].value=Test1&filter[1].key=price&filter[0].value=10&sorting[0].key=name&sorting[0].value=desc

【讨论】:

  • @LawrenceAiello,很明显,上面的链接不是指向站外资源的链接,而是 URL 格式的示例。
【解决方案2】:

我觉得用模型做参数比较好,比如:

Public class model
{
Public Dictionary<string,string> filter{get;set;}
Public Dictionary<string,string> sorting{get;set;}
Public int sorting{get;set;}
}

public async IHttpActionResult Get(model yourModel)
{
        //...
}

【讨论】:

  • 嗨 Shahrooz,我已经尝试过了,但它仍然没有正确绑定字典属性
  • @FanieReynders 请阅读:hanselman.com/blog/…
  • 据我了解,web api 中的模型绑定与 mvc 不同
  • @FanieReynders 是的,非常不同
猜你喜欢
  • 2014-09-10
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
相关资源
最近更新 更多