2

MVC のアクション内でクライアントから送信された Post パラメータとその値を取得するにはどうすればよいですか? クライアントから送信された JSON 構造に一致するアクション メソッドにパラメーターを追加したくありません。この情報を公開する Request またはその他のプロパティを使用したいと考えています。

たとえば、アクションが次の場合:

public ActionResult Index()

結果を達成するためにこのようなものを書きたくありません:

public ActionResult Index(MyObject object)

MyObject は、クライアントから送信された JSON に一致するクラスです。この情報を取得するために、リクエストまたはリクエストで送信された生のテキストをナビゲートしたい

重要: AJAX 経由で HttpPost リクエストを実行しています。フォームは送信していません。

Request.InputStream の使用は送信投稿では機能しますが、Ajax では機能しません。このコードは次のとおりです。

var input = new StreamReader(Request.InputStream).ReadToEnd();

Ajax の場合、InputStream は空です

4

4 に答える 4

3

私は正しい方向に進んでいましたが、何かが欠けていました。このコードは機能します

Request.InputStream.Position = 0;
var input = new StreamReader(Request.InputStream).ReadToEnd();
于 2012-10-02T20:00:46.627 に答える
2

私はパーティーに少し遅れていますが、Ajaxの投稿/フォームを使用してRequest.Formにアクセスできる代替手段を提供します。これはMVC4とjQuery1.9.1でテストされました。

application/jsonコントローラーのRequest.FormがAjax投稿に入力されていない場合は、contentTypeが(一般的なシナリオ)のデータを手動でシリアル化してコントローラーに送信している可能性があります。

これは、コントローラーにRequest.Formを設定しないjQuery.ajaxの例です。

    // JSON serialized form data.
    var data = {"id" : "1234", "name" : "Dave"};

    $.ajax({
        type: "POST",
        url: serviceUrl,
        contentType: "application/json",
        dataType: "json",
        data: JSON.stringify(data || {}),
        success: function () { }
    });

contentTypeを変更すると、コントローラーはフォーム送信のように投稿を処理します。

    // Form encoded data.  See jQuery.serialize().
    var data = "id=1234&name=Dave";

    $.ajax({
        type: "POST",
        url: serviceUrl,
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        dataType: "json",
        data: data,
        success: function () { }
    });

application/x-www-form-urlencoded; charset=UTF-8jQueryのデフォルトであるため、contentTypeを未定義のままにすることもできます。

何が起こっているのかをよりよく説明するために$.ajaxのみを使用したことに注意してください。$ .postを使用することもできますが、フォームでエンコードされたデータを送信する必要があります

于 2013-03-12T14:42:57.950 に答える
2

Request.FormMVC アクションでオブジェクトに引き続きアクセスできます。

Request.Form["name"]
于 2012-10-01T17:44:40.070 に答える
1

を使用Request.InputStreamして、投稿データに直接アクセスできます。ここを参照してください:

http://msdn.microsoft.com/en-us/library/system.web.httprequest.inputstream.aspx

ただし、主な関心事がその「モデル」部分をスキップすることである場合、MVC を使用してもあまり意味がありません。これが役立つことを願っています。

于 2012-10-01T20:00:33.883 に答える