【问题标题】:WebApi optional parameter - is required?WebApi 可选参数 - 是必需的吗?
【发布时间】:2015-07-28 05:22:41
【问题描述】:

我有一个 web api 控制器 (TasksController),它的 get 方法如下:

public IEnumerable<TimeUnitModel> Get(DateTime startDate, DateTime endDate, string projectCode = "")

如果我打电话

/api/tasks?startDate=2012%2F12%2F08&endDate=2012%2F12%2F15

返回正确的结果。

如果我打电话

/api/tasks?startDate=2012%2F12%2F08&endDate=2012%2F12%2F15&projectCode=

然后我得到:

{"projectCode.String":"A value is required but was not present in the request."}

知道为什么会这样吗? 谢谢。

编辑: 这是我在路线配置中的内容:

config.Routes.MapHttpRoute(
            name: "tasks_get",
            routeTemplate: "api/tasks",
            defaults: new { controller = "tasks", projectCode = RouteParameter.Optional}
        );

【问题讨论】:

  • @sirrocco 我以前在这个问题上看到过类似的行为stackoverflow.com/questions/12006524/…
  • 附言。 projectCode 在查询字符串中而不是路径中,因此不是路由参数 - 因此您可以从配置中删除可选参数位。
  • 谢谢马克。出于好奇,我还将看一下框架。是的,你说它不是路由参数是正确的,但我只需要尝试一下:)。

标签: routing asp.net-web-api


【解决方案1】:

您的第一个电话: /api/tasks?startDate=2012%2F12%2F08&amp;endDate=2012%2F12%2F15 你如何使用可选参数调用方法(即参数是可选的,所以你没有指定它)。当您在查询字符串中指定“&projectCode=”时,您正在指定参数,并且您正在将其指定为null。由于字符串可以为空,因此 api 假定您想要发送一个空值。如果您希望该方法使用空字符串运行,只需按照您之前的方式调用它,根本不发送该参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-03
    • 2017-06-14
    • 2018-11-05
    • 2014-08-02
    • 1970-01-01
    • 2019-07-25
    • 2017-01-15
    • 2018-05-20
    相关资源
    最近更新 更多