C# 具有不同参数的过载动作
我有几个从公共基础继承的模型类,例如Class1,Class2从CommonClass继承。我想编写单独的重载控制器操作,将这些模型类中的每一个作为参数。例如:C# 具有不同参数的过载动作,c#,asp.net-mvc,asp.net-mvc-5,C#,Asp.net Mvc,Asp.net Mvc 5,我有几个从公共基础继承的模型类,例如Class1,Class2从CommonClass继承。我想编写单独的重载控制器操作,将这些模型类中的每一个作为参数。例如: [HttpPost] public JsonResult MyAction(Class1 data) { // handle data here } [HttpPost] public JsonResult MyAction(Class2 data) {
[HttpPost]
public JsonResult MyAction(Class1 data)
{
// handle data here
}
[HttpPost]
public JsonResult MyAction(Class2 data)
{
// handle data here
}
这有可能实现吗?当我试图简单地编写这些操作方法时,MVC抛出System.Reflection.AmbiguousMatchException
我还尝试编写以基类为参数的单个操作,然后将数据强制转换到特定的类,但这给了我null
同一控制器上不能有多个具有相同名称和HTTP谓词的操作。您需要有不同的操作名称和路由
或者,您也可以签出,我将在其中演示如何编写自定义模型绑定器,并在第二次尝试时实现与基类的多态绑定。您可以使用[ActionName]注释装饰您的操作。像这样:
[HttpPost, ActionName("OtherName")]
public JsonResult MyAction(Class1 data)
{
// handle data here
}
[HttpPost]
public JsonResult MyAction(Class2 data)
{
// handle data here
}
这样,您就可以使用.NET不允许使用的字符来放置名称,如[ActionNameThis Example]
[HttpPost, ActionName("OtherName")]
public JsonResult MyAction(Class1 data)
{
// handle data here
}
[HttpPost]
public JsonResult MyAction(Class2 data)
{
// handle data here
}