25

使用 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; }
    }  
4

1 回答 1

51

我强烈邀请您阅读以下文章,以更好地了解参数绑定在 Web API 中的工作原理。读完你就会明白,默认情况下,Web API 将查询字符串参数绑定到原始类型,并将请求正文内容绑定到复杂类型。

因此,如果您需要将查询字符串参数绑定到复杂类型,则需要通过使用参数装饰参数来覆盖此默认行为[FromUri]

public virtual ApiDivisionsResponse  Get([FromUri] ApiDivisionsRequest request)
{
    ...
}

是的,我同意你的看法——这真是一团糟——模型绑定在普通的 ASP.NET MVC 中非常容易,他们在 Web API 中制造了一场噩梦。但是一旦你知道它是如何工作的,你就会避免陷阱。

于 2012-09-25T19:49:57.197 回答