testare API Web per il caricamento dei file, hanno una visione semplice modello come questo:Il raccoglitore modello di API Web non funziona con HttpPostedFileBase?
public class TestModel {
public string UserId {get;set;}
public HttpPostedFileBase ImageFile {get;set;}
}
utilizzato nel metodo:
[HttpPost]
public void Create(TestModel model)
Quando tento di inviare un multipart/form form-data codificati all'azione, ricevo questa eccezione:
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)
questo funziona con il modello MVC legante di default, ma a quanto pare non con API di Web. È stato rilevato che non è possibile utilizzare un modello di visualizzazione durante il caricamento di un file e semplicemente separare i dati in due chiamate. Ciò non funziona per me, dal momento che ho bisogno che gli altri campi vengano pubblicati per fare effettivamente qualcosa con il file caricato. C'è un modo per realizzare questo?
È necessario scrivere un 'MediaTypeFormatter' personalizzato per farlo funzionare. Come hai riscontrato "multipart/form-data" non è supportato immediatamente. Puoi iniziare [qui] (http://lonetechie.com/2012/09/23/web-api-generic-mediatypeformatter-for-file-upload/) – nemesv