webentwicklung-frage-antwort-db.com.de

So lesen Sie FormData in die Web-API ein

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

4

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...
}
7
Shahbaaz

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);
    }
0
AndrewWhalan

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"];    
        }  
0
user1567453

Sie können ein dynamic-Objekt erstellen

dynamic data = JsonConvert.DeserializeObject(jsonContent);

dann können Sie auf filesToDelete wie zugreifen 

data.filesToDelete;
0
Mostafiz

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.

0
matt.f.c