Ich habe ASP.NET MVC Webapplication und ich habe webapi webServvices hinzugefügt.
Ich habe folgenden Javascript-Code.
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) {
},
error: function (xhr, status, p3, p4) {
}
});
Folgendes ist der WebApi-Code:
public void UploadFiles(int clientContactId)
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var jsonContent = Request.Content.ReadAsStringAsync().Result;
}
wie kann ich nun jsonContent basierend auf einem von Javascript FormData übergebenen Schlüsselwertpaar lesen?
ich habe versucht, JsonConvert.DeserializeObject<?>
, aber es erfordert einen bestimmten Typ, um in zu deserialisieren.
ich möchte den Wert des Schlüssels "filesToDelete" in Javascript FormData übergeben.
wie man es liest
vielen Dank
Was ich tun würde, ist:
Client Side : Anstelle der Übergabe von clientContactId in der Abfragezeichenfolge. Hängen Sie das Schlüsselwertpaar im FormData-Objekt selbst an. Legen Sie den Datentyp als JSON fest.
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) {
}
});
Serverseite: Auf Serverseite können wir die Rohanforderung mit HttpContext.Current.Request
abrufen.
So können wir die Werte erhalten, indem wir einfach die Schlüsselwerte des FormData
-Objekts in HttpContext.Current.Request.Params["KeyValue"]
verwenden.
[HttpPost]
public void UploadFiles()
{
var filesToDelete = HttpContext.Current.Request.Params["filesToDelete"];
var clientContactId= HttpContext.Current.Request.Params["clientContactId"];
//Your code here...
}
Wenn Sie Daten mit JSON senden möchten, müssen Sie in C # ein Modell definieren, das dem in JSON zurückgegebenen Modell entspricht. Ihre WebApi-Controller-Methode sieht etwa so aus:
public HttpResponseMessage Post([FromBody]WorkerAbsenceModel absence)
{
bool ok = svc.CreateWorkerAbsence(absence);
if (ok)
{
return Request.CreateResponse(HttpStatusCode.OK);
}
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
Bitte verwenden Sie die unten stehenden Werte, um den Wert in der Steuerung zu erhalten.
var filesToDelete = HttpContext.Request.Params["filesToDelete"];
var clientContactId= HttpContext.Request.Params["clientContactId"];
Um den Wert "filesToDelete" zu erhalten, können Sie JSON.NET verwenden. der Code:
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"];
}
Sie können ein dynamic
-Objekt erstellen
dynamic data = JsonConvert.DeserializeObject(jsonContent);
dann können Sie auf filesToDelete
wie zugreifen
data.filesToDelete;
Ich denke, dieses Tutorial von der ASP.NET-Website könnte das sein, wonach Sie suchen:
Senden von HTML-Formulardaten in der ASP.NET-Web-API: Form-urlencoded-Daten
Basierend auf Ihrem Beispielcode bin ich nicht sicher, ob Sie einen komplexen Typ aus den Formulardaten oder nur eine einzelne Ganzzahl benötigen, die auf der UploadFiles-Methode (int clientContactId) in Ihrem API-Controller basiert. Die Signatur lässt den Anschein erwecken, als würden Sie nur versuchen, eine einzelne Ganzzahl zu übergeben. In diesem Fall könnte Ihre API-Controller-Methode folgendermaßen aussehen:
[HttpPost]
public void UploadFiles(int clientContactId)
{
//access the 'clientContactId' input parameter
int id = clientContactId;
}
Ihr AJAX - Aufruf sieht etwa so aus:
$.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
}
});
Wenn Sie die Daten bereits als JSON in Ihrem JavaScript formatiert haben, können Sie sie im Hauptteil der Anforderungen senden. Die Controller-Methode könnte ungefähr so aussehen:
[HttpPost]
public void UploadFiles([FromBody] MyComplexType input)
{
}
Und Ihr AJAX - Aufruf könnte folgendermaßen aussehen:
$.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
}
});
Schauen Sie sich das Tutorial an, mit dem ich oben verlinkt habe. Ich denke, das könnte die Dinge für Sie etwas besser erklären.