ASP.NET MVC Web Api获取不将QueryString映射到强类型参数

Mik*_*ynn 25 asp.net-mvc-4 asp.net-web-api

使用Web API,参数请求始终为null.我错过了使用强类型对象作为参数而不是简单类型作为参数的东西.

网址

http://localhost:2222/api/v1/divisions?EventId=30
Run Code Online (Sandbox Code Playgroud)

控制器动作

public virtual ApiDivisionsResponse Get(ApiDivisionsRequest request)
        {
            return _apiDivisionsService.GetDivisions(request);
        }
Run Code Online (Sandbox Code Playgroud)

宾语

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; }
    }  
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 51

我非常强烈地邀请您阅读以下文章,以便更好地了解参数绑定在Web API中的工作原理.阅读之后,您将了解到默认情况下,Web API将查询字符串参数绑定到基本类型,并将主体内容请求复杂类型.

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

public virtual ApiDivisionsResponse  Get([FromUri] ApiDivisionsRequest request)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

是的,我同意你的观点 - 这是一个混乱 - 模型绑定在普通的ASP.NET MVC中非常容易,他们在Web API中创造了一个噩梦.但是一旦你知道它是如何工作的,你就会避免陷阱.

  • 创造了一场噩梦不是它的一半.似乎几乎所有ASP.Net工作人员都会成为"愚蠢,它烧伤!"的典型代表.AjaxControlToolkit,现在流产...... (5认同)
  • @jerhewet 意识到在创建这些荒谬的 Web 表单组件时存在一些驱动因素。客户需求和 Microsoft 正在与 Java 世界的产品进行竞争。如果没有 ASP.NET Webforms 和其他的垫脚石,我们今天拥有的这个伟大的生态系统可能不会存在。 (2认同)