我正在研究 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 } });
}
}
当我将图像和名称字段值都提交给控制器时,上面的代码工作正常。在我的表单中,只有名称字段是强制性的,但不是图像字段用户可能不会提交他的图像。在这种情况下,我的控制器会抛出不受支持的媒体类型的错误。有什么方法可以让我选择提交图像或表单数据。如果我为图像编写两个动作,另一个为表单数据编写动作,但维护数据可能非常困难,而且我认为这也是不好的做法。如果我的方式出错了,请指导我。提前致谢。