Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有不同参数的过载动作_C#_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C# 具有不同参数的过载动作

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) {

我有几个从公共基础继承的模型类,例如Class1,Class2从CommonClass继承。我想编写单独的重载控制器操作,将这些模型类中的每一个作为参数。例如:

    [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
}