Chcę przesłać plik i wysłać wraz z plikiem kilka dodatkowych informacji, powiedzmy string foo i int bar.Metoda WebAPI, która pobiera plik i dodatkowe argumenty.
Jak napisać metodę kontrolera ASP.NET WebAPI, która odbiera przesyłanie pliku, ciąg znaków i int?
My JavaScript:
var fileInput = document.querySelector("#filePicker");
var formData = new FormData();
formData.append("file", fileInput.files[0]);
formData.append("foo", "hello world!");
formData.append("bar", 42);
var options = {
url: "/api/foo/upload",
data: formData,
processData: false // Prevents JQuery from transforming the data into a query string
};
$.ajax(options);
Mój kontroler WebAPI może uzyskać dostępu do pliku tak:
public async Task<HttpResponseMessage> Upload()
{
var streamProvider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(streamProvider);
var fileStream = await streamProvider.Contents[0].ReadAsStreamAsync();
}
Ale to nie jest dla mnie jasne, w jaki sposób mogę uzyskać w moim ciąg i mojego int. Sądzę, że prawdopodobnie mogę powiedzieć streamProvider.Content [1] lub cokolwiek innego, ale to jest bardzo nieprzyjemne.
Jaki jest właściwy sposób ©, aby napisać działanie WebAPI, które akceptuje przesłanie pliku, ciąg znaków i int?
jestem prawdopodobnie brakuje czegoś ... Dlaczego nie można po prostu zrobić parametry foo i pasek przesyłania metody i niech wiązania magia się dzieje? – Scrappydog
Skoncentrowałem się na wysyłaniu danych w FormData (np. Jako dane w $ .post (url, formData), segregator nigdy ich nie znalazł.Okazuje się, mogę wysłać plik jako dane formularza, a następnie wstaw inne argumenty w adresie URL, a wtedy moduł modelujący działa w sposób magiczny: –