¿Cómo se implementa correctamente un MediaTypeFormatter para manejar solicitudes de tipo 'multipart / mixed'?

Considere un servicio web escrito en la API web de ASP.NET para aceptar cualquier número de archivos como una solicitud 'multiparte / mixta'. La estera del método auxiliar se ve como sigue (asumiendo que_client es una instancia deSystem.Net.Http.HttpClient):

<code>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;
}
</code>

El método que acepta la solicitud en la subclase de ApiController tiene una firma de la siguiente manera:

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

Idealmente, me gustaría definirlo de esta manera, donde el contacto, la fuente y el destino se extraen del contenido 'multiparte / mixto' basado en la propiedad 'nombre' del encabezado 'Disposición de contenido'.

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

Sin embargo, con mi firma existente, la publicación de los datos en el servidor da como resultado unInvalidOperationException con un mensaje de error de:

No hay 'MediaTypeFormatter' disponible para leer un objeto de tipo 'HttpRequestMessage' con el tipo de medio 'multipart / mixed'.

Hay varios ejemplos en Internet sobre cómo enviar y recibir archivos utilizando la API web de ASP.NET y HttpClient. Sin embargo, no he encontrado ninguno que muestre cómo tratar este problema.

Comencé a mirar implementando una costumbre.MediaTypeFormatter y registrarlo con la configuración global. Sin embargo, si bien es fácil lidiar con la serialización de XML y JSON de forma personalizadaMediaTypeFormatter, no está claro cómo tratar las solicitudes 'multiparte / mixtas' que pueden ser casi cualquier cosa.

Respuestas a la pregunta(2)

Su respuesta a la pregunta