【问题标题】:ASP.NET MVC Web Api Get Not Mapping QueryString To Strongly Typed ParameterASP.NET MVC Web Api 获取未将 QueryString 映射到强类型参数
【发布时间】:2012-09-17 09:15:47
【问题描述】:

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

【问题讨论】:

    标签: asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 创造了一个噩梦不是它的一半。似乎 ASP.Net 工作人员接触到的几乎所有东西都成为了“愚蠢,它燃烧!”的典型代表。 AjaxControlToolkit,现在这个流产了……
    • @jerhewet 意识到在创建这些荒谬的 Web 表单组件时存在驱动因素。客户需求和微软正在与 Java 世界的产品竞争。如果不是 ASP.NET Webforms 和其他人的垫脚石,我们今天拥有的这个伟大的生态系统可能不存在。
    猜你喜欢
    • 2015-12-19
    • 2013-11-16
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多