use*_*479 9 file-upload model-binding asp.net-web-api
该模型:
public class UploadFileModel
{
public int Id { get; set; }
public string FileName { get; set; }
public HttpPostedFileBase File { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public void Post(UploadFileModel model)
{
// never arrives...
}
Run Code Online (Sandbox Code Playgroud)
我收到了一个错误
"没有MediaTypeFormatter可用于从媒体类型为'multipart/form-data'的内容中读取'UploadFileModel'类型的对象."
有没有办法解决?
这不容易.Web API中的模型绑定与MVC根本不同,您必须编写一个MediaTypeFormatter,它将文件流读入您的模型,并另外绑定可能相当具有挑战性的原语.
最简单的解决方案是使用某种类型MultipartStreamProvider的其他参数从该请求中获取文件流,并使用FormData该提供程序的名称值集合
示例 - http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2:
public async Task<HttpResponseMessage> PostFormData()
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
try
{
await Request.Content.ReadAsMultipartAsync(provider);
// Show all the key-value pairs.
foreach (var key in provider.FormData.AllKeys)
{
foreach (var val in provider.FormData.GetValues(key))
{
Trace.WriteLine(string.Format("{0}: {1}", key, val));
}
}
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4154 次 |
| 最近记录: |