使用[FromBody]发布反射

时间:2017-03-28 19:29:26

标签: c# asp.net

如果我有几个派生类,有没有办法可以创建一个使用反射处理所有派生类的控制器?

[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个对象时,此功能有用,但如果我发布FormBFormC,则无效。我尝试将其设置为[FromBody] BaseForm form,但这也无效。这样的事可能/好主意吗?所有形式的后端逻辑都是一样的,这就是我尝试这样做的原因

1 个答案:

答案 0 :(得分:0)

为什么不在控制器动作参数中尝试这个:

Miktar

动态关键字使得编译器在运行时确定对象属性