有没有办法能够获得模型绑定(或其他)以从ASP.NET MVC Web API中的多部分表单数据请求中给出模型?
我看到各种博客文章,但要么在文章和实际发布之间发生了变化,要么它们没有显示模型绑定工作。
这是一篇过时的帖子:发送 HTML 表单数据
这就是:Asynchronous File Upload using ASP.NET Web API
我在某个手动读取值的地方找到了这段代码(并做了一些修改):
模型:
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);
}
这段代码基本上是脆弱的、不可维护的,而且不强制执行模型绑定或数据注释约束。
有一个更好的方法吗?
更新:我看过这篇文章,这让我想到 - 我是否必须为我想要支持的每个模型编写一个新的格式化程序?