C# 处理查询字符串的最佳方法

C# 处理查询字符串的最佳方法,c#,.net,rest,asp.net-web-api2,C#,.net,Rest,Asp.net Web Api2,我正在努力理解使用单个方法和可选参数来接受Get方法与ApiController的查询参数之间的区别 我在浏览器中编写了代码,因此请原谅任何错误。为了简洁起见,我还省略了其他基本动作 以下是我对给定URL的选项(我计划拥有更多可以选择传入的查询字符串): 对于我的端点,我要执行以下操作: [Route("")] public IEnumerable<string> Get(string color) { List<string> someList = new L

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

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

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

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

[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;
}
[路线(“”)]
公共IEnumerable Get(字符串颜色)
{
List someList=新列表();
//这里有一些选择linq颜色逻辑的例子
返回一些列表;
}
[路线(“”)
公共IEnumerable Get(字符串颜色、字符串形状)
{
List someList=新列表();
//这里有一些选择linq颜色和形状的逻辑
返回一些列表;
}
还是使用可选参数

[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;
}
[路线(“”)]
public IEnumerable Get(字符串颜色,字符串形状=null)
{   
List someList=新列表();
if(String.IsNullOrWhiteSpace(shape))
{
//这里有一些选择linq颜色逻辑的例子
}
其他的
{
//这里有一些选择linq颜色和形状的逻辑
}
返回一些列表;
}

有什么区别
请参阅,其中解释了优点和缺点…但最严重的缺点是参数是在编译时填充的,而不是在运行时填充的…因此任何接口更改或可选参数值的更改都可能不会被调用您的函数的其他库拾取。因此,如果你决定将默认值更改为新的值,则它们实际上可以传递一个较旧的默认值。

而你的第一个例子可以被视为更精确,更适合(如果你在每个函数中都有不同的功能),有些人会认为它是冗长的。 也就是说,在以后使用可选参数时(在示例2中),可能会出现一些可怕的问题。(尽管我有点喜欢示例2)


请参阅,其中解释了优点和缺点…但最严重的缺点是参数是在编译时填充的,而不是在运行时填充的…因此任何接口更改或可选参数值的更改都可能不会被调用您的函数的其他库拾取。因此,如果您决定将默认值更改为新值,他们可能会传递一个旧的默认值。

您正在征求意见,这是离题的。也就是说,我更喜欢第一个。如果函数的整个逻辑基于可选参数发生更改,则该函数应分为两种方法。另外,一些Web API文档工具抱怨这样的可选参数。@Amy这里真的没有区别吗?我问这个问题是因为我不知道。也许有一个正确和错误的答案。如果这两个问题真的是平等的,并且是一个意见问题,那么我将删除这个问题。好吧,是的,这是有区别的,但这不是被问到的问题。我建议编辑这个问题,这样你就不会问哪个更好了。@Amy,更新了。。。如果你知道的话,我会很感激分享知识:)谢谢。不足以给出完整的答案:可选参数是。这对您来说可能一点都不重要,但您的代码示例之间仍然存在差异。一个是CLS合规,另一个是耸耸肩。你在征求意见,这是离题的。也就是说,我更喜欢第一个。如果函数的整个逻辑基于可选参数发生更改,则该函数应分为两种方法。另外,一些Web API文档工具抱怨这样的可选参数。@Amy这里真的没有区别吗?我问这个问题是因为我不知道。也许有一个正确和错误的答案。如果这两个问题真的是平等的,并且是一个意见问题,那么我将删除这个问题。好吧,是的,这是有区别的,但这不是被问到的问题。我建议编辑这个问题,这样你就不会问哪个更好了。@Amy,更新了。。。如果你知道的话,我会很感激分享知识:)谢谢。不足以给出完整的答案:可选参数是。这对您来说可能一点都不重要,但您的代码示例之间仍然存在差异。一个是CLS兼容,另一个是耸耸肩。
[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;
}