【问题标题】:MVC - Web API - Optional Struct ParameterMVC - Web API - 可选结构参数
【发布时间】:2016-11-21 01:42:19
【问题描述】:

我有一个名为 PaginationInput 的结构,我想将它作为 Web API 操作的可选参数。

方法定义如下:

public Foo[] Get(bool includeInactive = false, PaginationInput pagination = default(PaginationInput))

但是,当我在调用 API 操作时未指定 pagination 时,这会产生错误:

{
  "message": "The request is invalid.",
  "messageDetail": "The parameters dictionary contains a null entry for parameter 'pagination' of non-nullable type 'SyncSoft.Capital.Web.REST.Models.PaginationInput' for method 'SyncSoft.Capital.Web.REST.Models.Entity.Member[] Get(Int32, Boolean, SyncSoft.Capital.Web.REST.Models.PaginationInput, System.String)' in 'SyncSoft.Capital.Web.REST.Controllers.Entities.MemberController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."
}

有没有办法解决这个问题而无需使pagination 参数为空? (PaginationInput? pagination = null)

编辑:

示例请求:

http://localhost:65265/Foo/123/Bar?includeInactive=true

失败但如果我将pagination 参数放入:

http://localhost:65265/Foo/123/Bar?includeInactive=true&pagination=10rows,page1

【问题讨论】:

  • 尝试在get方法中使用[FromUri]作为PaginationInput
  • @Div 没有变化。
  • 显示请求示例
  • @Nkosi 我添加了一个用于工作和非工作请求的示例。由于这只是 GET,因此不需要正文,只需要查询字符串。
  • 为了保持提供的与问题相关的信息,我省略了最后一个参数。

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


【解决方案1】:

我的结论是这是不可能的。相反,必须将结构设为 Nullable<> 并默认为 null。

public Foo[] Get(bool includeInactive = false, PaginationInput? pagination = null)

【讨论】:

    猜你喜欢
    • 2016-11-09
    • 2016-02-12
    • 1970-01-01
    • 2012-04-04
    • 2018-03-27
    • 2023-04-08
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    相关资源
    最近更新 更多