【问题标题】:How to pass optional parameters in Web API如何在 Web API 中传递可选参数
【发布时间】:2015-12-23 00:24:49
【问题描述】:

你能帮我在 uri 之间传递可选参数吗

[Route("api/values/{a}/{b?}/{c?}")]
public string Get(string a = "", string b = "", string c = "")
{
    return string.Format("a={0}, b={1}, c={2}", a, b, c);
}

我可以调用 api -

api/values/abc/pqr/xyz returns a=abc, b=pqr, c=xyz
api/values/abc/pqr returns a=abc, b=pqr, c=

但我想调用 api -

api/values/abc//xyz which should return a=abc, b=, c=xyz
returns a=abc, b=xyz, c=

谁能帮忙

【问题讨论】:

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


    【解决方案1】:

    这就是 URI 的本意——它们应该代表对象的特定路径。如果不指定“b”或“a”,您应该无法到达“c”。

    但如果你真的想,也许只是使用某种通配符作为值?例如: /api/values/abc/*/xyz 并在您的代码中检查路径的一部分是否是您的通配符。这样,您将扩展 URI 的逻辑,而不是破坏它。 URI 将保持人类可读和明显(例如,获取所有值 XYZ,它们在某种程度上是容器 ABC 的后代)。

    为了保持 DRY,编写一个自定义模型绑定器,它将在 URL 中找到的任何通配符转换为空(或其他)值,然后将其传递给您的控制器。查看 System.Web.Http.ModelBinding 命名空间以帮助您入门。

    【讨论】:

      【解决方案2】:

      一个简单的解决方法是只使用可选的查询参数:

          [Route("api/values")]
          public string Get(string a = "", string b = "", string c = "")
          {
              return string.Format("a={0}, b={1}, c={2}", a, b, c);
          }
      

      =>

      /api/values?a=abc&c=xyz
      

      【讨论】:

        猜你喜欢
        • 2013-03-25
        • 2016-11-14
        • 2020-02-07
        • 1970-01-01
        • 1970-01-01
        • 2016-08-31
        • 2017-05-08
        • 2020-11-02
        • 2021-01-24
        相关资源
        最近更新 更多