Mam tę metodę ASP.NET Web API i chcę wysłać obiekt w tym samym czasie, plik!Wysyłanie danych formularzy ORAZ plik do ASP.NET Web API
public async Task<IHttpActionResult> Post(Facility facility)
{
if (!ModelState.IsValid)
return BadRequest();
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
// Read the form data.
await Request.Content.ReadAsMultipartAsync(provider);
// This illustrates how to get the file names.
foreach (MultipartFileData file in provider.FileData)
{
Trace.WriteLine(file.Headers.ContentDisposition.FileName);
Trace.WriteLine("Server file path: " + file.LocalFileName);
}
// Logic
// Login
return Ok(facilityManager.Insert(facility));
}
I chcę to nazwać, więc wysłać żądania http z Skrzypek:
Header:
Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468
User-Agent: Fiddler
Host: localhost:44301
Content-Length: 3279
ciała:
---------------------------acebdf13572468
Content-Disposition: form-data; name="fieldNameHere"; filename="credits.txt"
Content-Type: text/plain
<@INCLUDE *C:\Program Files (x86)\Fiddler2\credits.txt*@>
---------------------------acebdf13572468
Content-Disposition: form-data; name="facility"
Content-Type: application/json
{
"FacilityTypeId":"1"
}
---------------------------acebdf13572468--
pojawia się błąd 415 kod z tekstem odpowiedzi:
{"message": "Typ nośnika jednostki wniosku" multipart/dane-formularza "nie jest obsługiwany dla tego zasobu.", "ExceptionMessage": "Brak MediaTypeFormatter jest dostępny do odczytu obiektu typu" Obiekt "z treści z typem mediów "multipart/form-data". "," exceptionType ":" System.Net.Http.UnsupportedMediaTypeException "," stackTrace ":" at System.Net.Http.HttpContentExtensions.ReadAsAsync [T] (zawartość HttpContent, typ typ IEnumerable
1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable
1 formatujących, IFormatterLogger formatterLogger, cancellationToken cancellationToken) \ r \ n co System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync (HttpRequestMessage żądanie typu Type formatujących IEnumerable`1, IFormatterLogger formatterLogger, cancellationToken cancellationToken) "}
Dużo szukałem, ale nie mogłem znaleźć żadnego rozwiązania. Dzięki za pomoc.
EDIT:
Uwaga: Jeśli usunąć parametr „Kredyt”, i niech metodę tylko do przesyłania plików, działa idealnie, ale chcę, aby umieścić plik JSON i razem.
Witam, czy masz rozwiązanie tego problemu? Mam ten sam problem. – uikrosoft
@uikrosoft, Nie ustawiaj argumentów (parametrów) w funkcji api (Ustaw bez parametrów). I uzyskaj wartości parametrów wewnątrz tej funkcji z treści postu. To działało dla mnie. – Hashem
Oto kompletny samouczek: http://www.asp.net/web-api/overview/advanced/sending-html-form-data--part-2 –