2

このような ASP.NET MVC 3 コントローラーがあるとします。

public class MyController : Contoller
{
    public ActionResult Edit(MyModel model)
    {
        /* doing some stuff with the model */
    }
}

モデルはこんな感じ

public class MyModel
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
    public ThatModel Property1 { get; set; }
    public List<ThisModel> BunchOfThisModel { get; set; }
}

public class ThatModel
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
    public string Property3 { get; set; }
    public string Property4 { get; set; }
    public string Property5 { get; set; }
    public string Property6 { get; set; }
}

public class ThisModel
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}

ASP.NET MVC または .NET (v4 は問題ありませんが、v4.5 は問題ありません) は、モデル (この場合は MyModel など) をエンコードする組み込みの手段を提供し、コード化されたフォーム URL としてアクションに送信できるようにしますか (別名x-www-form-urlencoded)? 例は「property1=abc&property2=def」です。ただし、ASP.NET MVC には、要求をモデルにデコードするときに、ネストされたモデルなどを処理する独自の方法があります。.NET 1.1 以降に提供されているWebRequest / WebResponse APIを使用してブラウザーをシミュレートしているとします。

本質的に、テストでリクエストを構築して、それを確認したいと思います

  1. 必要に応じて、バインドによって一部のデータが除外されます
  2. 必要に応じて、偽造防止トークンが設定されます
  3. 悪意のあるデータはそれに応じて処理されます

注: ASP.NET Web API は、この段階では使用されていません。私は既存のアプリケーションの (統合) テストを作成しているため、モデルを JSON、XML、または別の代替形式として送信することは、この質問には当てはまりません。

4

1 に答える 1

0

この質問を正しく理解できたと思いますが、そのデータを (JSON から?) 「POST」している場合は、最善の推測プロセスを使用してモデルを構築できます。

プロパティ名が一致するので、送信した場合 (重複した Property1 は実際にはここでは Property3 であると推測します)

{
  Property1="this", 
  Property2="that", 
  Property3={Property1="this3", ....}, 
  BunchOfThisModel=[{Property1="bunchthis"},{....}]
}

これにより、POCO に一致する名前が入力されます。プロパティ (つまり、Property2) を省略した場合、そのdefault(T)値が使用されます。

オブジェクト モデルを GET リクエストで送信するのははるかに複雑です。JSON 文字列を base64 してからサーバーで解析することができます。

CustomBinder を使用することもできます (良い記事はこちら)。BindAttributeExclude/Include オプションを使用して、POCO オブジェクトにバインドするプロパティを制御することもできます。

ポイントを逃していないことを願っており、これが役立つことがわかります:)

于 2012-06-08T11:47:04.880 に答える