不同参数的过载动作
本文关键字:参数 | 更新日期: 2023-09-27 18:28:58
我有几个从公共库继承的模型类(例如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
。
[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")]