C# 默认情况下,IActionResult.Net Core上的参数

C# 默认情况下,IActionResult.Net Core上的参数,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我目前有一个有很多页面的仪表板项目。它们有很多参数;然而,它们都有一些共同的参数。在下面的示例中,它们是companyCode和outputMode 我希望获取所有公共参数,并使它们自动包含在一个新类中,该类仍然接受与输入相同的信息,但以一种更易于维护的方式 现状 RawController.cs public IActionResult metric1( string companyCode , int param1 , string param2 , string outp

我目前有一个有很多页面的仪表板项目。它们有很多参数;然而,它们都有一些共同的参数。在下面的示例中,它们是
companyCode
outputMode

我希望获取所有公共参数,并使它们自动包含在一个新类中,该类仍然接受与输入相同的信息,但以一种更易于维护的方式

现状 RawController.cs

public IActionResult metric1(
  string companyCode 
  , int param1
  , string param2
  , string outputMode = "default"
)
{
  // DO STUFF
  return View();
}

public IActionResult metric2(
  string companyCode 
  , int param3
  , string param4
  , string outputMode = "default"
)
{
  // DO STUFF
  return View();
}
public CustomActionResult metric1(
  int param1
  , string param2
)
{
  // DO STUFF
  return View();
}

public CustomActionResult metric2(
  int param3
  , string param4
)
{
  // DO STUFF
  return View();
}
public IActionResult metric1( 
  string standard_params
  , int param1
  , string param2 
)
{
  // DO STUFF
  return View();
}

public IActionResult metric2( 
  string standard_params
  , int param3
  , string param4  )
{
  // DO STUFF
  return View();
}
期望未来状态 UNKNOWN.cs(伪代码)

RawController.cs

public IActionResult metric1(
  string companyCode 
  , int param1
  , string param2
  , string outputMode = "default"
)
{
  // DO STUFF
  return View();
}

public IActionResult metric2(
  string companyCode 
  , int param3
  , string param4
  , string outputMode = "default"
)
{
  // DO STUFF
  return View();
}
public CustomActionResult metric1(
  int param1
  , string param2
)
{
  // DO STUFF
  return View();
}

public CustomActionResult metric2(
  int param3
  , string param4
)
{
  // DO STUFF
  return View();
}
public IActionResult metric1( 
  string standard_params
  , int param1
  , string param2 
)
{
  // DO STUFF
  return View();
}

public IActionResult metric2( 
  string standard_params
  , int param3
  , string param4  )
{
  // DO STUFF
  return View();
}
这可能吗? 我是不是完全错了?
任何帮助都将不胜感激。

您可以使用基类来代替接口,也可以在接口之外使用基类。因为填充默认属性是实现的一部分,所以不能仅通过接口来完成

internal abstract class MetricActionResult: IActionResult {
    this.companyCode = RouteValueDictionary["companyCode"];
    this.outputMode = RouteValueDictionary["outputMode"];
}

public class CustomActionResult : MetricActionResult {
    // ...
}

在尝试实现Jacob的答案后,我意识到我并不是真的想创建一个自定义版本的
IActionResult
,我真的想标准化发送的参数。在一个模型中定义这些参数,通过HTTP请求将它们作为JSON发送,并解析URL参数,直到它们适合该模型为止,这样做会更加有效

解决方案 metricModel.cs

public class standardParams
    {
        public string companyCode { get; set; }
        public string outputMode { get; set; } = "default";
    }
RawController.cs

public IActionResult metric1(
  string companyCode 
  , int param1
  , string param2
  , string outputMode = "default"
)
{
  // DO STUFF
  return View();
}

public IActionResult metric2(
  string companyCode 
  , int param3
  , string param4
  , string outputMode = "default"
)
{
  // DO STUFF
  return View();
}
public CustomActionResult metric1(
  int param1
  , string param2
)
{
  // DO STUFF
  return View();
}

public CustomActionResult metric2(
  int param3
  , string param4
)
{
  // DO STUFF
  return View();
}
public IActionResult metric1( 
  string standard_params
  , int param1
  , string param2 
)
{
  // DO STUFF
  return View();
}

public IActionResult metric2( 
  string standard_params
  , int param3
  , string param4  )
{
  // DO STUFF
  return View();
}
在IActionResults中,我可以通过执行以下操作访问标准参数:

standardParams p = JsonConvert.DeserializeObject<standardParams>(standard_params);
companyCode = p.companyCode;
outputMode = p.outputMode;
standardParams p=JsonConvert.DeserializeObject(标准参数);
companyCode=p.companyCode;
outputMode=p.outputMode;
作为参考,转到
/Raw/metric1?standard_params={companyCode:“test”}¶m1=1¶m2=test2
给出控制器内的以下数据:

p.companyCode=“test”

p.outputMode=“default”

param1=1


param2=“test2”

您想要实现什么?什么是可能的?常见的输入参数与输出结果有什么关系?我只想通过减小RawController.cs输出的大小来提高代码的可维护性。这绝对是一个有用的开始。它让我不必每次都写下来就可以搞乱
IActionResult
;然而,我不能像我所想的那样从抽象类实际访问RouteValueDictionary。我最终为我的请求创建了一个模型,并通过JSON编码的参数发送它。如果它最终成功了,我会把它作为一个答案发布,但我充满希望!