【问题标题】:Best way to handle query string [closed]处理查询字符串的最佳方法[关闭]
【发布时间】:2017-12-21 22:20:06
【问题描述】:

我正在努力理解使用单个方法和可选参数来接受带有ApiController 查询参数的Get 方法之间的区别。

我在浏览器中编写了代码,因此请原谅任何错误。为简洁起见,我还省略了其他基本操作。

以下是给定 url 的选项(我计划有更多可以选择传入的查询字符串):

GET http://myAppi.com/resources?color=red
GET http://myAppi.com/resources?color=red&shape=round

对于我的端点,我会执行以下操作:

[Route("")]
public IEnumerable<string> Get(string color)
{
     List<string> someList = new List<string>();
     //some selecting linq color logic here
     return someList;
}

[Route("")]
Public IEnumerable<string> Get(string color, string shape)
{
    List<string> someList = new List<string>();
    //some selecting linq color and shape logic here
    return someList;
}

还是我使用可选参数...

[Route("")]
public IEnumerable<string> Get(string color, string shape = null)
{   
    List<string> someList = new List<string>();
    if (String.IsNullOrWhiteSpace(shape))
    {
        //some selecting linq color logic here
    }
    else
    {
        //some selecting linq color and shape logic here
    }
    return someList;
}

有什么区别?

【问题讨论】:

  • 你在征求意见,这是题外话。也就是说,我更喜欢第一个。如果函数的整个逻辑基于可选参数发生变化,则该函数应拆分为两个方法。此外,一些 Web API 文档工具对诸如此类的可选参数感到不满。
  • @Amy 这里真的没有区别吗?我问这个问题是因为我不知道。也许有一个正确和错误的答案。如果这些确实是平等的并且是意见问题,我将删除该问题。
  • 嗯,是的,有区别,但这不是被问到的问题。我建议编辑问题,这样您就不会问哪个更好。
  • @Amy,更新了...如果你知道,我将不胜感激分享知识:) 谢谢。
  • 不足以获得完整答案:可选参数为sort of CLS-compliant。这可能对您来说根本无关紧要,但它仍然是您的代码示例之间的区别。一个是符合 CLS 的,另一个是 shrug

标签: c# .net rest asp.net-web-api2


【解决方案1】:

虽然您的第一个示例可以被视为更精确、更适合(如果您确实在每个函数中具有不同的功能),但有些人会认为它很冗长。

话虽如此,当您使用可选参数时(在示例 2 中),稍后可能会出现一些可怕的问题。 (虽然我有点喜欢示例 2)

请参阅here,它解释了优缺点...但最严重的缺点是参数是在编译时填充的,而不是运行时...所以任何接口都发生了变化,或者您的可选参数值发生了变化可能不会被调用您的函数的其他库拾取。因此,它们实际上可能会传递一个较旧的默认值 - 如果您决定将默认值更改为新值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-02
    • 2012-05-31
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多