我目前有一个包含很多页面的Dashboard项目。它们有很多参数。但是,它们都有一些共同的参数。在下面的示例中,它们将是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();
}
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();
}
这可能吗? 我是在以一种完全错误的方式思考这个问题吗? 任何帮助将不胜感激。
答案 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"}¶m1=1¶m2=test2
会在控制器内提供以下数据:
p.companyCode = "test"
p.outputMode = "default"
param1 = 1
param2 = "test2"