2017-03-28 10 views
1

私はいくつかの派生クラスを持っていますが、反射を使ってそれらのすべてを扱うコントローラを作成する方法はありますか?私は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) 

ダイナミックキーワードは、それはコンパイラようにします:バックエンドのロジックは、なぜ私はあなたのコントローラのアクションパラメータにこれを試していけない理由は、この

+1

可能です。私はそれを一度やりました。私の意見では、それはひどい考えです:-) –

+0

おかげさまで、なぜそれはひどい考えだと思いますか? – John

+1

私は、コードの読み込みとデバッグの複雑さがそれだけの価値はないと思います。共有ロジックをカプセル化し、それを呼び出す一連の同様のアクションメソッドがある場合は、維持する負担があり、インターフェイスが全体的に分かりやすくなります。 –

答えて

0

をやろうとしているされたすべての形態のため、すべて同じです実行時にオブジェクトのプロパティを決定します

+0

ありがとう、私はそれを見て、それを試してみます – John

+0

これはいくつかの非直列化エラーを引き起こしています。ありがとうございます – John

+0

deserializationエラーを投稿したいですか? – victor

関連する問題