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

时间:2018-09-20 00:09:18

标签: c# asp.net-core asp.net-core-mvc

我目前有一个包含很多页面的Dashboard项目。它们有很多参数。但是,它们都有一些共同的参数。在下面的示例中,它们将是companyCodeoutputMode

我想采用所有通用参数,并使其自动包含在新类中,该类仍以与输入相同的信息,但以更易于维护的方式。

当前状态

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();
}

所需的未来状态

UNKNOWN.cs(伪代码)

public class CustomActionResult: IActionResult {
  this.companyCode = RouteValueDictionary["companyCode"];
  this.outputMode = RouteValueDictionary["outputMode"];
}

RawController.cs

public CustomActionResult metric1(
  int param1
  , string param2
)
{
  // DO STUFF
  return View();
}

public CustomActionResult metric2(
  int param3
  , string param4
)
{
  // DO STUFF
  return View();
}

这可能吗? 我是在以一种完全错误的方式思考这个问题吗? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用基类代替接口或在接口之外使用基类。由于填充默认属性将是实现的一部分,因此您不能仅通过接口来做到这一点。

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

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

答案 1 :(得分:0)

尝试实现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 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;

作为参考,转到/Raw/metric1?standard_params={companyCode: "test"}&param1=1&param2=test2会在控制器内提供以下数据:

p.companyCode = "test"

p.outputMode = "default"

param1 = 1

param2 = "test2"