不同参数的过载动作

本文关键字:参数 | 更新日期: 2023-09-27 18:28:58

我有几个从公共库继承的模型类(例如Class1Class2CommonClass继承)。我想写一个单独的重载控制器操作,将这些模型类中的每一个作为参数。例如:

    [HttpPost]
    public JsonResult MyAction(Class1 data)
    {
       // handle data here
    }
    [HttpPost]
    public JsonResult MyAction(Class2 data)
    {
       // handle data here
    }

有可能以某种方式实现这一点吗?当我试图简单地编写那些操作方法时,MVC抛出System.Reflection.AmbiguousMatchException

我还尝试过用基类作为参数编写单个操作,然后将数据强制转换到特定的类,但这给了我null

    [HttpPost]
    public JsonResult MyAction(CommonClass data)
    {
        if(data.IsSomething)
        {
            var castedData = data as Class1;
            // process casted data
        }
        else
        {
            var castedData = data as Class2;
            // process casted data
        }
    }

不同参数的过载动作

在同一个控制器上不能有多个具有相同名称和HTTP谓词的操作。你需要有不同的动作名称和路线。

或者,您可以签出this answer,我在其中说明了如何编写自定义模型绑定器并实现多态绑定(您对基类的第二次尝试)。

您可以使用[ActionName]注释来装饰您的操作。像这样:

[HttpPost, ActionName("OtherName")]
public JsonResult MyAction(Class1 data)
{
   // handle data here
}
[HttpPost]
public JsonResult MyAction(Class2 data)
{
   // handle data here
}

有了它,您可以使用.NET不允许的字符来放置名称,如[ActionName("This-Example")]