如果我有几个派生类,有没有办法可以创建一个使用反射处理所有派生类的控制器?
[Route("api/{type:regex(forma|formb|formc)}")]
public class FormController : BaseController
{
...
[HttpPost]
public IActionResult CreateOrUpdateForm([FromBody] FormA forma, string type)
{
var formType = GetTypeFromName(type);
var submitMethod = _formService
.GetType()
.GetMethod("SaveForm")
.MakeGenericMethod(new Type[] {formType});
var savedForm = submitMethod.Invoke(_formService, new object[]{forma});
return createOkResponse(new
{
form = savedForm
});
}
}
当我发布FormA
个对象时,此功能有用,但如果我发布FormB
或FormC
,则无效。我尝试将其设置为[FromBody] BaseForm form
,但这也无效。这样的事可能/好主意吗?所有形式的后端逻辑都是一样的,这就是我尝试这样做的原因
答案 0 :(得分:0)
为什么不在控制器动作参数中尝试这个:
Miktar
动态关键字使得编译器在运行时确定对象属性