2016-11-25 5 views
3

Ich habe ASP.NET MVC webapplication Ich habe webapi webServices hinzugefügt.Wie man FormData in Web API liest

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) { 


      } 
     }); 

Es folgt WebAPI Code:

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


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




     } 

jetzt, wie jsonContent von Javascript Formdata übergeben basierend auf Schlüsselwertpaar zu lesen?

Ich habe versucht, JsonConvert.DeserializeObject<?>, aber es erfordert bestimmte Art zu deserialize in.

Ich möchte den Wert des Schlüssels "filesToDelete" erhalten in Javascript FormData übergeben.

wie liest man es?

dank

+0

einen Parameter hinzufügen '[FromBody] string filesToDelete' auf Ihre Methode vorausgesetzt, Ihr wirklich eine Zeichenfolge sind vorbei –

Antwort

0

Wenn Sie Daten mit JSON schicken wie, dass Sie ein Modell in C# definieren sollten, die das Modell übereinstimmt Sie zurück in JSON vorbei. Ihr WebAPI Controller-Methode wird wie folgt aussehen:

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

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

Um den „filesToDelete“ Wert erhalten Sie JSON.NET verwenden können. 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

Sie dynamic Objekt

dynamic data = JsonConvert.DeserializeObject(jsonContent); 

dann können Sie filesToDelete wie

data.filesToDelete; 
0

Ich denke, dieses Tutorial von der ASP.NET-Website zugreifen schaffen sein könnte, was du bist Suchen nach:

Sending HTML Form Data in ASP.NET Web API: Form-urlencoded Data

Basierend auf Ihrem Beispielcode bin ich nicht sicher, ob Sie einen komplexen Typ aus den Formulardaten oder nur eine einzelne Ganzzahl basierend auf der Methode UploadFiles (int clientContactId) in Ihrem API-Controller benötigen. Die Signatur scheint so zu sein, als ob Sie nur versuchen, eine einzelne Ganzzahl zu übergeben. Wenn das der Fall ist, könnte Ihr API-Controller-Methode wie folgt aussehen:

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

Und Ihr wird AJAX-Aufruf wie folgt aussehen:

$.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 bereits die Daten als JSON formatiert in Ihrer JavaScript können Sie es im Hauptteil der Anfragen senden. Das Controller-Methode wie folgt aussehen könnte:

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

} 

Und Ihre AJAX-Aufruf wie folgt aussehen könnte:

$.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 ich aber oben verbunden ist, denke ich, dass ein bisschen was erklären könnte besser für dich.

3

Was würde ich tun ist:

Client Side: Statt clientContactId in Query-String übergeben. Fügen 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) { 


     } 
    }); 

Server Side: Auf Server-Seite können wir die rohe Anfrage bekommen HttpContext.Current.Request verwenden.

So können wir die Werte erhalten, indem Sie einfach die Schlüsselwerte FormData Objekt innerhalb 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... 
} 
+0

Bitte fügen Sie eine Erklärung darüber, warum Sie diesen Code denken die Frage beantwortet (nur zeigen Code ohne Erklärung damit verbundenen gilt als minderwertige Antworten). –