私はいくつかの派生クラスを持っていますが、反射を使ってそれらのすべてを扱うコントローラを作成する方法はありますか?私はFormA
オブジェクトを投稿が、私はFormB
またはFormC
投稿した場合、明らかにしない場合は、この作品[FromBody]を反射で使用して投稿する
[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
});
}
}
。私は[FromBody] BaseForm form
に設定しようとしましたが、どちらもうまくいきませんでした。これは可能なのか良いアイデアですか?
([FromBody] dynamic formObj, string type)
ダイナミックキーワードは、それはコンパイラようにします:バックエンドのロジックは、なぜ私はあなたのコントローラのアクションパラメータにこれを試していけない理由は、この
可能です。私はそれを一度やりました。私の意見では、それはひどい考えです:-) –
おかげさまで、なぜそれはひどい考えだと思いますか? – John
私は、コードの読み込みとデバッグの複雑さがそれだけの価値はないと思います。共有ロジックをカプセル化し、それを呼び出す一連の同様のアクションメソッドがある場合は、維持する負担があり、インターフェイスが全体的に分かりやすくなります。 –