Есть ли способ получить привязку модели (или что-то еще), чтобы выдать модель из запроса данных с несколькими данными в ASP.NET MVC Web API?
Я вижу различные записи в блогах, но все изменилось между публикацией и фактическим выпуском или они не показывают работу привязки модели.
Это устаревшее сообщение: Отправка данных HTML-формы
и так далее: Асинхронная загрузка файлов с использованием веб-API ASP.NET
Я нашел этот код (и немного изменил) где-то, который считывает значения вручную:
Модель:
public class TestModel
{
[Required]
public byte[] Stream { get; set; }
[Required]
public string MimeType { get; set; }
}
Контроллер:
public HttpResponseMessage Post()
{
if (!Request.Content.IsMimeMultipartContent("form-data"))
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
IEnumerable<HttpContent> parts = Request.Content.ReadAsMultipartAsync().Result.Contents;
string mimeType;
if (!parts.TryGetFormFieldValue("mimeType", out mimeType))
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
var media = parts.ToArray()[1].ReadAsByteArrayAsync().Result;
// create the model here
var model = new TestModel()
{
MimeType = mimeType,
Stream = media
};
// save the model or do something with it
// repository.Save(model)
return Request.CreateResponse(HttpStatusCode.OK);
}
Тест:
[DeploymentItem("test_sound.aac")]
[TestMethod]
public void CanPostMultiPartData()
{
var content = new MultipartFormDataContent { { new StringContent("audio/aac"), "mimeType"}, new ByteArrayContent(File.ReadAllBytes("test_sound.aac")) };
this.controller.Request = new HttpRequestMessage {Content = content};
var response = this.controller.Post();
Assert.AreEqual(response.StatusCode, HttpStatusCode.OK);
}
Этот код в основном хрупкий, не ремонтируемый и, кроме того, не обеспечивает привязки привязки модели или ограничений аннотации данных.
Есть ли лучший способ сделать это?
Обновление: Я видел этот пост, и это заставляет меня думать - мне нужно написать новый форматтер для каждой отдельной модели что я хочу поддержать?