web-dev-qa-db-ja.com

フォームデータをWeb APIに読み込む方法

ASP.NET Web APIフレームワークを使用しているASP.NET MVC WebApplicationがあります。

Javascriptコード:

var data = new FormData();
data.append("filesToDelete", "Value");

$.ajax({    
    type: "POST",
    url: "/api/FileAttachment/UploadFiles?clientContactId=" + clientContactId,
    contentType: false,
    processData: false,
    data: data,
    success: function (result) {
        // Do something
    },
    error: function (xhr, status, p3, p4) {
        // Do something
    }
});

C#コード(WebAPI):

public void UploadFiles(int clientContactId) {
    if (!Request.Content.IsMimeMultipartContent()) {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }

    var jsonContent = Request.Content.ReadAsStringAsync().Result;
}

JavaScript FormDataから渡されたキーと値のペアに基づいてjsonContentを読み取るにはどうすればよいですか?

やってみましたJsonConvert.DeserializeObject<?>、ただし逆シリアル化するには特定の型が必要です。

キーの値を取得したい"filesToDelete" Javascript FormDataから渡されました。

この値を取得するにはどうすればよいですか?

9

私がすることは:

クライアント側:クエリ文字列でclientContactIdを渡す代わりに。キーと値のペアをFormDataオブジェクト自体にアタッチします。 dataTypeをJSONとして設定します。

var data = new FormData();
data.append("filesToDelete", "Value");
data.append("clientContactId", 
(clientContactId != undefined || clientContactId != null) ? clientContactId : ''));

$.ajax({
        type: "POST",
        url: "/api/FileAttachment/UploadFiles",
        /* ONLY IF YOU ARE UPLOADING A FILE
        contentType: false,
        processData: false, */
        dataType: "JSON"
        data: data,
        success: function (result) {

        },
        error: function (xhr, status, p3, p4) {


        }
    });

サーバー側:サーバー側では、HttpContext.Current.Requestを使用して未加工のリクエストを取得できます。

したがって、HttpContext.Current.Request.Params["KeyValue"]内のFormDataオブジェクトのキー値を使用するだけで値を取得できます。

[HttpPost]
public void UploadFiles()
{
     var filesToDelete = HttpContext.Current.Request.Params["filesToDelete"];
     var clientContactId= HttpContext.Current.Request.Params["clientContactId"];

     //Your code here...
}
7
Shahbaaz

このようなJSONを使用してデータを送信する場合は、JSONで返すモデルと一致するモデルをC#で定義する必要があります。 WebApiコントローラーメソッドは次のようになります。

    public HttpResponseMessage Post([FromBody]WorkerAbsenceModel absence)
    {
        bool ok = svc.CreateWorkerAbsence(absence);
        if (ok)
        {
            return Request.CreateResponse(HttpStatusCode.OK);
        }

        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }
0
AndrewWhalan

コントローラの値を取得するには、以下を使用してください、

var filesToDelete = HttpContext.Current.Request.Params["filesToDelete"];
var clientContactId= HttpContext.Current.Request.Params["clientContactId"];

"filesToDelete"値を取得するには、 JSON.NET を使用できます。コード:

public void UploadFiles(int clientContactId)
        {
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }        
            var jsonContent = Request.Content.ReadAsStringAsync().Result;

            JObject jObject = JObject.Parse(jsonContent);
            var filesToDelete = jObject["filesToDelete"];    
        }  
0
user1567453

dynamicオブジェクトを作成できます

dynamic data = JsonConvert.DeserializeObject(jsonContent);

次に、filesToDeleteにアクセスできます

data.filesToDelete;
0
Mostafiz

ASP.NET Webサイトのこのチュートリアルがあなたが探しているものかもしれません:

ASP.NET Web APIでのHTMLフォームデータの送信:Form-urlencoded Data

サンプルコードに基づいて、フォームデータからの複合型が必要か、APIコントローラのUploadFiles(int clientContactId)メソッドに基づく単一の整数だけが必要かどうかはわかりません。この署名により、1つの整数を渡そうとしているように見えます。その場合、APIコントローラメソッドは次のようになります。

[HttpPost]
public void UploadFiles(int clientContactId)
{
    //access the 'clientContactId' input parameter
    int id = clientContactId;
}

そして、あなたのAJAX呼び出しは次のようになります:

$.ajax({
    url: '/api/controller/UploadFiles', //your app url
    type: 'POST',
    data: { clientContactId: 12345 },
    dataType: 'json',
    success: function (result) {
        //do whatever
    },
    error: function (result) {
        //do whatever
    }
});

JavaScriptでJSONとしてフォーマットされたデータがすでにある場合は、リクエストの本文で送信できます。 Controllerメソッドは次のようになります。

[HttpPost]
public void UploadFiles([FromBody] MyComplexType input)
{

}

そして、あなたのAJAX呼び出しは次のようになります:

$.ajax({
    url: '/api/controller/UploadFiles', //your app url
    type: 'POST',
    data: JSON.stringify(input),
    dataType: 'json',
    success: function (result) {
        //do whatever
    },
    error: function (result) {
        //do whatever
    }
});

上記のリンク先のチュートリアルをご覧ください。少しわかりやすいかもしれません。

0
matt.f.c