使用Web API,参数请求始终为空。我使用强类型对象作为参数,而不是简单的类型作为参数,我缺少一些东西。
网址
http://localhost:2222/api/v1/divisions?EventId=30
控制器动作
public virtual ApiDivisionsResponse Get(ApiDivisionsRequest request) { return _apiDivisionsService.GetDivisions(request); }
目的
public class ApiDivisionsRequest : ApiAuthorizedRequest { public ApiDivisionsRequest() { Page = 1; PageSize = 10; } public int EventId { get; set; } public int PageSize { get; set; } public int Page { get; set; } public string[] Includes { get; set; } }
解决方法
我非常强烈地邀请您阅读
following article,以更好地了解参数绑定在Web API中的工作原理。读完之后,您将明白,默认情况下,Web API将查询字符串参数绑定到基本类型,并将身体内容请求到复杂类型。
因此,如果需要将查询字符串参数绑定到复杂类型,则需要通过使用[FromUri]参数装饰参数来覆盖此默认行为:
public virtual ApiDivisionsResponse Get([FromUri] ApiDivisionsRequest request) { ... }
是的,我同意你的看法 – 这是一个糟糕的地方 – 在ASP.NET MVC中,模型绑定非常简单,他们在Web API中创造了一个噩梦。但是一旦你知道它是如何工作的,你就可以避免这种烦恼。