C# Sonarqube可能会报告控制器操作上的重复代码块

C# Sonarqube可能会报告控制器操作上的重复代码块,c#,.net-core,sonarqube,asp.net-core-webapi,code-analysis,C#,.net Core,Sonarqube,Asp.net Core Webapi,Code Analysis,我正在使用SonarQube分析我的.NET核心应用程序,它现在报告以下两个控制器操作的重复块:从查询字符串获得的三个参数和 调用参数shelper.processandsanitizese2inputparams,如图所示 静态方法调用清理每个参数(null检查、修剪和自定义逻辑),并将它们分组到字典中 关于如何重构这些操作以避免触发SonarQube的重复代码检测,有什么提示吗 // comments omitted [HttpGet("{seasonKey}")] [ProducesRe

我正在使用SonarQube分析我的.NET核心应用程序,它现在报告以下两个控制器操作的重复块:从查询字符串获得的三个参数和 调用
参数shelper.processandsanitizese2inputparams
,如图所示

静态方法调用清理每个参数(null检查、修剪和自定义逻辑),并将它们分组到字典中

关于如何重构这些操作以避免触发SonarQube的重复代码检测,有什么提示吗

// comments omitted
[HttpGet("{seasonKey}")]
[ProducesResponseType(typeof(See2Season), 200)]
public async Task<IActionResult> GetSeasonByKeyAsync(
    string seasonKey,
    [FromQuery(Name = "provider")] string providers,
    [FromQuery(Name = "lang")] string languages,
    [FromQuery(Name = "priority")] string priority)
{
    var sanitizedSee2Params = ParametersHelper.ProcessAndSanitizeSee2InputParams(
        this._logger,
        true,
        new KeyValuePair<string, string>(InputParameterNames.PROVIDERS, providers),
        new KeyValuePair<string, string>(InputParameterNames.LANGUAGE, languages),
        new KeyValuePair<string, string>(InputParameterNames.PRIORITY, priority));

    var result = await this._seasonManager.GetSeasonByKeyAsync(
        seasonKey,
        sanitizedSee2Params).ConfigureAwait(false); 

    return this.Ok(result);
}

// comments omitted
[HttpGet("{seasonKey}/children")]
[ProducesResponseType(typeof(IEnumerable<See2Content>), 200)]
public async Task<IActionResult> GetSeasonChildrenByKeyAsync(
    string seasonKey,
    [FromQuery(Name = "overrideDefaultDirection")] bool overrideDefaultDirection,
    [FromQuery(Name = "provider")] string providers,
    [FromQuery(Name = "lang")] string languages,
    [FromQuery(Name = "priority")] string priority)
{
    var sanitizedSee2Params = ParametersHelper.ProcessAndSanitizeSee2InputParams(
        this._logger,
        true,
        new KeyValuePair<string, string>(InputParameterNames.PROVIDERS, providers),
        new KeyValuePair<string, string>(InputParameterNames.LANGUAGE, languages),
        new KeyValuePair<string, string>(InputParameterNames.PRIORITY, priority));

    var result = await this._seasonManager.GetSeasonChildrenByKeyAsync(
        seasonKey,
        overrideDefaultDirection,
        sanitizedSee2Params).ConfigureAwait(false);

    return this.Ok(result);
}
//省略注释
[HttpGet(“{seasonKey}”)]
[产品响应类型(类型(参见第2季度),200)]
公共异步任务GetSeasonByKeyAsync(
字符串键,
[FromQuery(Name=“provider”)]字符串提供程序,
[FromQuery(Name=“lang”)]字符串语言,
[FromQuery(Name=“priority”)]字符串优先级
{
var sanitizedSee2Params=参数Shelper.ProcessAndSanitizee2InputParams(
这个,
是的,
新的KeyValuePair(InputParameterNames.PROVIDERS,PROVIDERS),
新的KeyValuePair(InputParameterNames.LANGUAGE,languages),
新的KeyValuePair(InputParameterNames.PRIORITY,PRIORITY));
var result=等待此消息。_seasemanager.getSeasembyKeyAsync(
季候键,
SanitizedSee 2参数)。配置等待(false);
返回这个。Ok(结果);
}
//省略注释
[HttpGet(“{seasurekey}/children”)]
[产品响应类型(typeof(IEnumerable),200)]
公共异步任务GetSeasonChildrenByKeyAsync(
字符串键,
[FromQuery(Name=“OverridedFaultDirection”)]bool OverridedFaultDirection,
[FromQuery(Name=“provider”)]字符串提供程序,
[FromQuery(Name=“lang”)]字符串语言,
[FromQuery(Name=“priority”)]字符串优先级
{
var sanitizedSee2Params=参数Shelper.ProcessAndSanitizee2InputParams(
这个,
是的,
新的KeyValuePair(InputParameterNames.PROVIDERS,PROVIDERS),
新的KeyValuePair(InputParameterNames.LANGUAGE,languages),
新的KeyValuePair(InputParameterNames.PRIORITY,PRIORITY));
var result=等待此操作。_seasemmanager.getseasempicChildrenByKeyAsync(
季候键,
覆盖故障方向,
SanitizedSee 2参数)。配置等待(false);
返回这个。Ok(结果);
}

解决此复制问题(克隆)不需要消除整个复制。删除/减少由第一个克隆的行
96
-
101
引起的重复就足够了。可以考虑将逻辑提取到单独的方法中。像这样:

private SanitizedInputParams sanitizeSeasonParams(string providers, string languages, string priority) {
  return ParametersHelper.ProcessAndSanitizeSee2InputParams(
    this._logger,
    true,
    new KeyValuePair<string, string>(InputParameterNames.PROVIDERS, providers),
    new KeyValuePair<string, string>(InputParameterNames.LANGUAGE, languages),
    new KeyValuePair<string, string>(InputParameterNames.PRIORITY, priority));
}
private SanitizedInputParams sanitizeAsonParams(字符串提供程序、字符串语言、字符串优先级){
返回参数Shelper.ProcessAndSanitizeE2InputParams(
这个,
是的,
新的KeyValuePair(InputParameterNames.PROVIDERS,PROVIDERS),
新的KeyValuePair(InputParameterNames.LANGUAGE,languages),
新的KeyValuePair(InputParameterNames.PRIORITY,PRIORITY));
}
因此,克隆长度减少,使得SonarQube可能不再报告此问题(取决于配置的最小克隆长度)。
或者,你可以考虑增加最小克隆长度来关注更长、更相关的克隆。另请参见:

我无法控制SonarQube的配置,因此无法减少最小克隆长度。最后,我为所有重复的参数创建了一个自定义属性,正如您所建议的,逻辑现在被附加到一个私有方法中。非常感谢。