Testing ra Web API cho tập tin tải lên, có một mô hình nhìn đơn giản như thế này:Trình kết nối mô hình API Web không hoạt động với HttpPostedFileBase?
public class TestModel {
public string UserId {get;set;}
public HttpPostedFileBase ImageFile {get;set;}
}
Được sử dụng trong phương pháp này:
[HttpPost]
public void Create(TestModel model)
Khi tôi cố gắng để gửi một multipart/form form-data mã hóa cho hành động này, tôi nhận được ngoại lệ này:
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)
Điều này hoạt động với chất kết dính mô hình MVC mặc định, nhưng dường như không phải với API của Web. Tìm thấy một số đề cập rằng bạn không thể sử dụng mô hình chế độ xem khi tải lên tệp và chỉ tách dữ liệu thành hai cuộc gọi. Điều đó không hiệu quả đối với tôi, vì tôi cần các trường khác đang được đăng để thực sự làm điều gì đó với tệp được tải lên. Có cách nào để hoàn thành nó không?
Bạn cần phải viết một 'MediaTypeFormatter' tùy chỉnh để làm cho nó hoạt động. Như bạn đã trải nghiệm "multipart/form-data" không được hỗ trợ trong hộp. Bạn có thể bắt đầu [ở đây] (http://lonetechie.com/2012/09/23/web-api-generic-mediatypeformatter-for-file-upload/) – nemesv