2017-01-29 10 views
3

MVC 5プロジェクトが正常に動作しています。そのプロジェクトをMVC 6 with.netコアに移行する必要があります。すべての作業を微調整して問題を抱えてしまった:私の行動の多くは1つ以上のオブジェクトをパラメータとして受け入れます。使用しているモデルバインダーのMVC 5では問題はありませんが、MVC 6はそのようなアクションのすべてのパラメーターにnullが設定されているようです。MVCとWebAPIの統合の一部です。私の質問は、もしもそれの周りにのリクエストラッパーオブジェクトの別のモデルライブラリを追加せずにいる場合です。

例えば:複数のオブジェクトをmvc 6のパラメータとして渡します。

{ "environment" : {*Data...*}, 
    "pipeline" : {*Data...*} 
} 

が受け入れた形でJSONデータを含むMVC 5つのプロジェクトAJAX要求に

[HttpPost] 
    public ActionResult GetVersionData(OvlEnvironment environment, Pipeline pipeline) 
    { 
     BL.SetEnviromentVersion(pipeline, environment); 
     return PartialView("_Version", environment); 
    } 

。 mvc 6では、同じ要求に対する両方のオブジェクトがnullと表示されます。
ありがとう

+0

を[OK]を、具体的な例 –

+0

を提供してください、例は、例えば、[FromBody]を追加してみ –

+1

追加(FromBody)OvlEnvironment環境、[FromBody]パイプラインパイプライン) –

答えて

4

モデルにバインドするデータがポストリクエストの本文に含まれることを、ASP.NET Core MVC Frameworkに伝える必要があります。これは[FromBody] attributeで行います。

[FromBody]:コンフィグレーション済みフォーマッタを使用して、 リクエストボディのデータをバインドします。フォーマッタは、 リクエストのコンテンツタイプに基づいて選択されます。

hereのように、1つのJSONソースに複数のパラメータをバインドすることはできません。あなたはこのような一般的なjオブジェクトを使用することができ、追加のモデルクラスを避けるために:

[HttpPost] 
public ActionResult GetVersionData([FromBody] JObject data) 
{ 
    var environment = data["environment"].ToObject<OvlEnvironment>(); 
    var pipline = data["pipeline"].ToObject<Pipeline>(); 

    BL.SetEnviromentVersion(pipeline, environment); 
    return PartialView("_Version", environment); 
} 
+0

"別のモデルを追加しなくても、要求ラッパーオブジェクトのライブラリです。 " GitHubの問題へのリンクが追加されている場合は、本文のJSON入力をバインドすることができないことが示されていますが、これは私が最初に実行したものではないことを確信しています。 –

+0

複数のパラメータオブジェクトに渡す。したがって、他の解決策のいくつかの種類を求める必要があります。 JObject(JSON.netはASP.NET Core MVCによって内部的に使用されるため、他のモデルライブラリは追加されません)を使用することで、データ転送用のクラスの定義を避けることができます。もう1つの解決方法は、複数のパラメータを1つのオブジェクトに結合することです。 –

+0

私はカスタムモデルのバインダー\ formatterをこの問題に対処すると思います。悲しいことに、マイクロソフトが以前のバージョンのMVCで既に行っていたので、時間がありません。私の目標は、移行中に多くのコードを変更することではありません。厳密に型付けされたラッパーオブジェクトを作成することは、あたかもゆるやかに型付けされた言語で作業しているかのように、すべてのアクションでJObjectを受け入れるよりも、実際には優れたソリューションだと思います。両方のソリューションで私は多くのコードを変更しています。私はコントローラをそのままにしておく方法を探しています。人がいない場合、人生は吸います –

関連する問題