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编码的参数发送它。如果它最终成功了,我会把它作为一个答案发布,但我充满希望!