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から渡されました。
この値を取得するにはどうすればよいですか?
私がすることは:
クライアント側:クエリ文字列で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...
}
このような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);
}
コントローラの値を取得するには、以下を使用してください、
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"];
}
dynamic
オブジェクトを作成できます
dynamic data = JsonConvert.DeserializeObject(jsonContent);
次に、filesToDelete
にアクセスできます
data.filesToDelete;
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
}
});
上記のリンク先のチュートリアルをご覧ください。少しわかりやすいかもしれません。