在asp.net web Api 2.0中使用Multipart formdata直接进行模型绑定?

时间:2017-08-21 11:27:55

标签: c# asp.net asp.net-mvc-4 asp.net-web-api asp.net-web-api2

假设我们有一个html表单,可以发布带有产品名称和描述的产品图片。

              产品名称 :                            说明:                            图像文件                                 

我想在不使用提供者formdata的情况下检索“ProductName”和“Description”字段值。

Web API控制器 -

if (!Request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }

try
        {
            // Read the form data.
            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));
            }
        }
        }
        catch (System.Exception e)
        {
            return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
        }

我们可以轻松获得所有物业价值。但是我们可以制作如下的网络Api功能:

 [HttpPost]
  public IHttpActionResult Upload(ProductInfo model){
  return Content(HttpStatusCode.OK, true);
} 

Public Class ProductInfo {
   public string ProductName{ get; set; }
   public string Description{ get; set; }
}

1 个答案:

答案 0 :(得分:0)

你可以这样试试,只需添加IEnumerable<HttpPostedFileBase> files作为参数即可。 DefaultModelBinder,如果存在多部分表单数据,则会自动正确绑定到您的参数类型。

[HttpPost]
public IHttpActionResult Upload(ProductInfo model, 
                                IEnumerable<HttpPostedFileBase> files)
{
    return Content(HttpStatusCode.OK, true);
}