Wie implementiert man einen MediaTypeFormatter korrekt, um Anfragen vom Typ 'multipart / mixed' zu behandeln?

Betrachten ein web service geschrieben ASP.NET Web-API akzeptiert eine beliebige Anzahl von Dateien als "multipart/mixed" - Anforderung. Die helper-Methode mat wie folgt Aussehen (unter der Annahme _client ist eine Instanz von System.Net.Http.HttpClient):

public T Post<T>(string requestUri, T value, params Stream[] streams)
{
    var requestMessage = new HttpRequestMessage();
    var objectContent = requestMessage.CreateContent(
        value,
        MediaTypeHeaderValue.Parse("application/json"),
        new MediaTypeFormatter[] {new JsonMediaTypeFormatter()},
        new FormatterSelector());

    var content = new MultipartContent();
    content.Add(objectContent);
    foreach (var stream in streams)
    {
        var streamContent = new StreamContent(stream);
        streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        streamContent.Headers.ContentDisposition =
            new ContentDispositionHeaderValue("form-data")
            {
                Name = "file",
                FileName = "mystream.doc"
            };
        content.Add(streamContent);
    }

    return _httpClient.PostAsync(requestUri, content)
        .ContinueWith(t => t.Result.Content.ReadAsAsync<T>()).Unwrap().Result;
}

Die Methode, die die Anforderung akzeptiert, in der Unterklasse von ApiController hat eine Signatur wie folgt:

public HttpResponseMessage Post(HttpRequestMessage request)
{
    /* parse request using MultipartFormDataStreamProvider */
}

Im Idealfall würde ich mag, um zu definieren, wie diese, in denen Kontakt, Quelle und Ziel sind entnommen aus den 'multipart/mixed' - Inhalt auf der Grundlage der 'name' - Eigenschaft des 'Content-Disposition" - header.

public HttpResponseMessage Post(Contact contact, Stream source, Stream target)
{
    //process contact, source and target
}

Allerdings mit meiner bereits vorhandenen Unterschrift, Veröffentlichung die Daten an die server-Ergebnisse in eine InvalidOperationException mit einer Fehlermeldung:

Kein 'MediaTypeFormatter' Lesen Sie ein Objekt vom Typ
'HttpRequestMessage' mit dem media-type 'multipart/mixed'.

Gibt es eine Reihe von Beispielen, die auf das internet zum senden und empfangen von Dateien über das ASP.NET Web-API und HttpClient. Allerdings habe ich keine gefunden, die zeigen, wie mit diesem problem umzugehen.

Schaute ich mir die Implementierung einer benutzerdefinierten MediaTypeFormatter und registrieren Sie es mit der globalen Konfiguration. Jedoch, während es ist leicht zu Bearbeiten serialisieren von XML-und JSON in eine benutzerdefinierte MediaTypeFormatter es ist unklar, wie man mit 'multipart/mixed' Anfragen, die können so ziemlich alles sein.

InformationsquelleAutor der Frage bloudraak | 2012-04-05

Schreibe einen Kommentar