Wie poste und erhalte ich eine Datei mit Web-API
Ich habe eine Api Post-Methode, mit der ich jeden Dateityp akzeptieren möchte und die so aussieht:
[HttpPost]
public async Task<IHttpActionResult> Post()
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
if (provider.Contents.Count != 1)
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest,
"You must include exactly one file per request."));
}
var file = provider.Contents[0];
var filename = file.Headers.ContentDisposition.FileName.Trim('\"');
var buffer = await file.ReadAsByteArrayAsync();
}
Dies funktioniert in Fiddler, wenn ich versuche, ein Bild darauf zu posten. Ich schreibe jedoch eine Client-Bibliothek und habe eine Methode, die so aussieht:
public string PostAttachment(byte[] data, Uri endpoint, string contentType)
{
var request = (HttpWebRequest)WebRequest.Create(endpoint);
request.Method = "POST";
request.ContentType = contentType;
request.ContentLength = data.Length;
var stream = request.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
var response = (HttpWebResponse) request.GetResponse();
using (var reader = new StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
Wenn ich versuche, ein Bild mit dieser Funktion zu veröffentlichen, wird ein UnsuportedMediaType-Fehler angezeigt. Ich nehme an, es liegt daran, dass mein Bild nicht mehrteilig ist. Gibt es eine einfache Möglichkeit, meine Anfrage vom richtigen Typ zu stellen?
Wenn ich meine Web-API-Post-Methode ändern muss, gibt es eine einfache Möglichkeit, dies zu tun, ohne Dateien auf den Server zu schreiben und im Speicher zu behalten?