Model binding to Dictionary from URI in ASP.NET We

2020-03-19 02:13发布

问题:

Please refer to this link from MVC: http://aspnetwebstack.codeplex.com/discussions/351011

I am having trouble with model binding. From JavaScript I do an GET Ajax request to my API end point called "/api/products" passing in some parameters including paging and sorting as query parameters. Here is the complete URI:

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

On the server side, I have an Web API controller accepting these properties from the URI:

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

The "count" and "page" parameters bind perfectly fine, and the filter and sorting binds as an instance of a dictionary, but its count is 0.

I got this working in MVC but it doesn't seem to be doing the truck in Web API.

回答1:

You can still leverage out of the box default model binder and your uri would look like

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



回答2:

I think it is better to use a model as parameter, such as:

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)
{
        //...
}