0

これについてはすでにたくさんの質問があることを知っています-どれがバージョンの問題に関連しているか、どれがjQuery(私は使用していません)に関連しているかなどを整理するのに苦労しています. MVC4 RC (4.0.20505.0)、Visual Studio 2010 Ultimate SP1。

モデルに複合型があります。

public HttpResponseMessage Post([FromUri]Person person)
    {
        TableStorageHelper personHelper = new TableStorageHelper();
        personHelper.Save(personHelper.GetTableNameForType("Person"), person);

        var response = Request.CreateResponse<Person>(HttpStatusCode.Created, person);
        return response;
    }

私はこのJSON文字列を渡しています-ほとんどFiddlerを使用していますが、別のコントローラーのコードからも試しています(コントローラーが受け取ったオブジェクトの値を取得できることを確認するためだけに、すべてのテストをローカルで実行しようとしています):

JSON:

{"FirstName":"Andy","LastName":"Schultz","PartitionKey":"USW","RowKey":"per-928c8f74-2efd-4fc2-a71c-fb3ea8acc6d7","NickName":null,"FullName":"Andy Schultz","Description":null,"ImageLocation":null,"Region":"USW","CommentsAboutMe":{"Comments":[]},"CommentsByMe":{"Comments":[]}}

ここにあるすべてのプロパティはクラスに存在します。

他のコントローラーからのコード:

HttpWebRequest request = HttpWebRequest.Create("http://127.0.0.2:8080/api/persons/") as HttpWebRequest;
        request.Method = "POST";
        request.ContentType = "text/json";
        using (var writer = new StreamWriter(request.GetRequestStream()))
        {
            Person person = new Person("Andy", "Schultz", "USW");
            Formatting formatting = new Formatting();
            JsonSerializerSettings settings = new JsonSerializerSettings();
            settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            string json = JsonConvert.SerializeObject(person, formatting, settings);

            writer.Write(json);
        }

毎回、コントローラーに空の Person オブジェクトを取得します (最初の行でデバッグしています)。すべての値は NULL です。

私のコントローラーの [FromUri] 属性に気づいたかもしれません - 未定義の型の ModelBinder がないというエラーを回避するためにそれをしなければなりませんでしたが、それが正しいかどうかはわかりません - 私は何も渡していませんご存知のように、情報は Uri にあり、本体にあります。

4

1 に答える 1

0

ありがとうマイク・ストール: http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

[FromUri] 属性は実際に、コントローラー メソッドのパラメーターを探している要求本文ではなく、uri を読み取るようにコントローラーに指示しました。そこにはなかったので、すべてが null でした。

未定義のコンテンツのタイプに対して定義されたフォーマッタがないことを示す、その属性を修正したというエラーは、リクエストのコンテンツ タイプを不適切に宣言したことが原因でした。正しい方法は "Content-Type: text/json; charset=utf-8

于 2012-08-09T23:21:13.777 に答える