2013-06-18 6 views
6

ich jQuery Ajax bin mit Datei hochladen wollen aber einige Parameter auf WebAPI Methode hinzuzufügen, hier ist:WebAPI ajax Formulardaten mit zusätzlichen Parametern laden

var data = new FormData(); 
data.append("file", $("#file")[0].files[0]); 
data.append("myParameter", "test"); // with this param i get 404 

$.ajax({ 
    url: '/api/my/upload/', 
    data: data, 
    cache: false, 
    contentType: false, 
    processData: false, 
    type: 'POST', 
    success: function (data) { 
     console.log(data); 
    } 
}); 

Die WebAPI Controller:

public class MyController : ApiController 
{ 
    public string Upload(string myParameter) 
    { 
     return System.Web.HttpContext.Current.Request.Files.Count.ToString() + "/" + myParameter; 
    } 
} 

Ohne myParameter funktioniert alles, aber wenn ich myParameter in formdata und api einfüge, bekomme ich 404, jede Chance, es zum Laufen zu bringen?

+0

Mate können Sie den vollständigen Code, der für Sie arbeitet, veröffentlichen. Ich finde es schwierig, eine bessere Lösung zu finden. Prost –

Antwort

13

Durch die Veröffentlichung des FormData Objekts wird eine Anforderung mit dem Inhaltstyp multipart/form-data generiert. Sie haben den Anforderungs-Inhalt wie so zu lesen:

[HttpPost] 
public async Task<string> Upload() 
{ 
    var provider = new MultipartFormDataStreamProvider("C:\\Somefolder"); 
    await Request.Content.ReadAsMultipartAsync(provider); 

    var myParameter = provider.FormData.GetValues("myParameter").FirstOrDefault(); 
    var count = provider.FileData.Count; 

    return count + "/" + myParameter; 
} 

BTW, dies wird die Datei in dem Pfad speichern angegeben, die C:\\SomeFolder ist und Sie können die lokalen Dateinamen provider.FileData[0].LocalFileName;

Bitte nehmen Sie sich einen Blick mit bekommen bei MSDN code sample und Henrik's blog entry.

+1

Das sieht vielversprechend für mein Szenario aus; aber wie ruft ein C# (nicht jQuery) -Client diese Methode auf? Ich muss zwei String-Argumente UND eine XML-Datei übergeben. –

+0

'Aufgabe ' erhalten Fehler an diesem Punkt. irgendwelche Ideen, wie beobachtbares Array und Datei zum Prüfer übergeben werden. Prost –