2013-06-18 15 views
6

używam jQuery ajax załadować plik, ale chcą, aby dodać kilka parametrów na metodzie WebAPI, tutaj jest:WebAPI ajax formdata przesłać z dodatkowymi parametrami

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

Kontroler WebAPI:

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

Bez myParameter wszystko działa, ale kiedy dołączę mójParametr na formularzu i metodzie api, otrzymam 404, jakąkolwiek szansę, żeby to zadziałało?

+0

mate można opublikować pełny kod, który działa dla Ciebie. wydaje mi się, że trudno jest znaleźć lepsze rozwiązanie. Pozdrawiam: –

Odpowiedz

13

Umieszczanie obiektu FormData powoduje żądanie z typem zawartości multipart/form-data. Trzeba czytać treść żądania tak:

[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, to zapisanie pliku w podanej ścieżce, która jest C:\\SomeFolder i można dostać lokalną nazwę pliku używając provider.FileData[0].LocalFileName;

Proszę spojrzeć pod numerami MSDN code sample i Henrik's blog entry.

+1

To wygląda obiecująco na mój scenariusz; ale w jaki sposób klient C# (nie jQuery) nazywa tę metodę? Muszę przekazać dwa ciągi argumentów ORAZ plik XML. –

+0

'Zadanie ' otrzymanie błędu w tym miejscu. wszelkie pomysły na przekazanie obserwowalnej tablicy i pliku do kontrolera. Twoje zdrowie –

Powiązane problemy