如何在asp.net web api中提交带有可选文件数据的表单数据

时间:2013-09-13 13:11:14

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

我正在研究Asp.Net MVC Web API。我想通过asp.net web api发布一个html表单。我的表单包含文本框和文件上传控件之类的控件,如

 @using (Html.BeginForm("PostImage", "Home", FormMethod.Post, new { id = "form1", enctype = "multipart/form-data" }))
    {
       <input type="text" id="name" name="name"/>
       <input type="file" id="file" name="file"/>
       <input type="submit" value="upload"/>
     }

我的api控制器看起来像这样,

[HttpPost]
    public async Task<HttpResponseMessage> PostImage(HttpRequestMessage request)
    {
       try
       {
          string imagename = "";
string name="";
          if (!request.Content.IsMimeMultipartContent("form-data"))
          {
              return request.CreateErrorResponse(HttpStatusCode.UnsupportedMediaType, new HttpError() { { "status", "failed" }, { "message", "Invalid file format" } });
          }
          else
          {
               string PATH = ConfigurationManager.AppSettings["ImageuploadPath"].ToString();//
               var streamProvider = new CustomMultipartFormDataStreamProvider(PATH);
               await Request.Content.ReadAsMultipartAsync(streamProvider);
               foreach (var file1 in streamProvider.FileData)
               {
                  FileInfo fileInfo = new FileInfo(file1.LocalFileName);
                  imagename = fileInfo.Name;
               }
                name = Convert.ToString(streamProvider.FormData["name"]);
            }
            if (imagename == "")
            {
               imagename = "NOIMAGE";
            }
             //save those two fields   
          }
          catch (Exception ex)
          {
             return request.CreateErrorResponse(HttpStatusCode.InternalServerError, new HttpError() { { "status", "failed" }, { "message", ex.InnerException } });
          }
     }

当我向控制器提交图像和名称字段值时,上面的代码工作正常。在我的表单中,只有名称字段是必填字段,但图像字段用户可能不会提交他的图像。在这种情况下,我的控制器会抛出不支持的媒体类型的错误。有没有办法我可以选择提交图像或表格数据。如果我写一个用于图像和其他用于表单数据的两个动作,但是维护数据可能非常困难,我认为这也是不好的做法。如果我在路上出错了,请指导我。提前谢谢。

0 个答案:

没有答案