我的印象是,ASP.Net Web API中的模型绑定应该支持与MVC支持的相同的最低级别的功能的绑定。
拿下面的控制器:
public class WordsController : ApiController { private string[] _words = new [] { "apple","ball","cat","dog" }; public IEnumerable<string> Get(SearchModel searchSearchModel) { return _words .Where(w => w.Contains(searchSearchModel.Search)) .Take(searchSearchModel.Max); } } public class SearchModel { public string Search { get; set; } public int Max { get; set; } }
我要求:
http://localhost:62855/api/words?search=a&max=2
不幸的是,模型不像在MVC中那样绑定。为什么这不具有约束力,我会期望?我将在我的应用程序中有很多不同的模型类型。这将是很好,如果绑定只是工作,就像它在MVC。
解决方法
看看这个:
How WebAPI does Parameter Binding
你需要装饰你的复杂参数,如:
public IEnumerable<string> Get([FromUri] SearchModel searchSearchModel)
要么
public IEnumerable<string> Get([ModelBinder] SearchModel searchSearchModel)