L'API Web classeur modèle ne fonctionne pas avec HttpPostedFileBase?

Tester l'API Web de téléchargement de fichiers, la simple vue du modèle comme ceci:

public class TestModel {
    public string UserId {get;set;}
    public HttpPostedFileBase ImageFile {get;set;}
}

Utilisés dans la méthode:

[HttpPost]
public void Create(TestModel model)

Lorsque je tente de poster un multipart/form-data codées à l'action, je reçois cette exception:

System.InvalidOperationException: No MediaTypeFormatter is available to read an object of type 'TestModel' from content with media type 'multipart/form-data'.
   at System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger)
   at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger)
   at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger)
   at System.Web.Http.ModelBinding.FormatterParameterBinding.ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken)
   at System.Web.Http.Controllers.HttpActionBinding.<>c__DisplayClass1.<ExecuteBindingAsync>b__0(HttpParameterBinding parameterBinder)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator`1 enumerator, CancellationToken cancellationToken) 

Cela fonctionne avec la valeur par défaut liant de modèle MVC, mais apparemment pas avec l'API Web. Trouvé quelques mentionne que vous ne pouvez pas utiliser un modèle d'affichage lors du téléchargement d'un fichier, et à juste séparer les données en deux appels. Cela ne fonctionne pas pour moi, car j'ai besoin d'autres champs d'être publié afin de faire réellement quelque chose avec le fichier téléchargé. Est-il un moyen pour accomplir cette?

Vous avez besoin d'écrire une coutume MediaTypeFormatter pour le faire fonctionner. Comme vous connu "multipart/form-data" n'est pas pris en charge hors de la boîte. Vous pouvez commencer ici

OriginalL'auteur heyseuss | 2012-10-02