3

の代わりにをDefaultModelBinder使用してデータがPOSTされたときに、を機能させる方法はありますが、値の実際のペイロードはJSONエンコードされていますか?x-www-form-urlencodedapplication/json

たとえば、単一のKey-Valueペアが送信されています。

key: 'events' 
value: '[{"event":"inbound","ts":1350928095,"msg":{"raw_msg":"Received"}}]'

この場合、値にはJSON配列が含まれます。

注:POSTはサードパーティから送信されているため、制御できません。

4

3 に答える 3

0

一般的に、答えは「もちろんです。「NAME = VALUE」(例:「data = MYJSON」)を使用し、送信する前にエンコードすることを忘れないでください。」です。

次に例を示します。

しかし、質問を読み直すと、MVC4を使用しています。それは単純なC#またはJavaプログラムに制限を課すかもしれません:(

于 2012-10-25T15:34:27.493 に答える
0

単一のアクションでこの動作が必要な場合は、 を使用して JSON コンテンツをコレクションに逆シリアル化し、 /メソッドJavaScriptSerializerを使用してコレクションを検証します。UpdateModelTryUpdateModel

多くのアクションが必要な場合は、メソッドを継承しDefaultModelBinderてオーバーライドすることにより、カスタム モデル バインダーを使用する必要がありますCreateModelCreateModelメソッドで を使用してJavaScriptSerializer、POST された値からオブジェクトを作成します。

public class CustomModelBinder: DefaultModelBinder
{
   protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
  {
     // JavaScriptSerializer serializer = new JavaScriptSerializer();
     // return serializer.DeserializeObject(read the value from request);
  }
}

CustomModelBinder属性を使用して、クロス アクションを再利用できるようになりましたBind

于 2012-10-25T16:35:30.430 に答える
0

私はそうは思わない。アプリケーション/json コンテンツ タイプをポストするようにクライアントを変更するか、カスタム モデル バインダーを作成することができます。

于 2012-10-25T15:36:02.247 に答える