我想将图像作为HttpPost上传到方法。
我尝试了以下代码:
[HttpPost]
public HttpResponseMessage Image(int id)
{
var httpRequest = HttpContext.Current.Request;
if (httpRequest.Files.Count == 1) //do something
return Request.CreateResponse(HttpStatusCode.Created);
}
然后我使用邮递员并将图像作为二进制文件添加到身体中。
但httpRequest.Files.Count
为0。
我做错了什么?
答案 0 :(得分:0)
试试以上代码。
尝试使用google chrome rest客户端..易于测试 我希望这可以帮到你
public async Task<HttpResponseMessage> Image(int id)
{
string filepath = @"e:\testing\file";
if (Request.Content.IsMimeMultipartContent())
{
var streamProvider = new MultipartFormDataStreamProvider(filepath);
await Request.Content.ReadAsMultipartAsync(streamProvider);
foreach (MultipartFileData fileData in streamProvider.FileData)
{
if (string.IsNullOrEmpty(fileData.Headers.ContentDisposition.FileName))
{
return Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted");
}
string fileName = fileData.Headers.ContentDisposition.FileName;
if (fileName.StartsWith("\"") && fileName.EndsWith("\""))
{
fileName = fileName.Trim('"');
}
if (fileName.Contains(@"/") || fileName.Contains(@"\"))
{
fileName = Path.GetFileName(fileName);
}
File.Move(fileData.LocalFileName, Path.Combine(filepath, fileName));
}
return Request.CreateResponse(HttpStatusCode.OK);
}
有关详细信息,请查看此Tutorial
答案 1 :(得分:0)
当您执行post(以及数据部分中的application / octet-stream)以及适当的边界时,您应该验证您的Content-Type是多部分/表单数据。如果您在问题中添加请求的标题/正文,也会有所帮助。
这个适用于我:
Header:
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrhNuQUPgZKD8RxKq
Payload:
------WebKitFormBoundaryrhNuQUPgZKD8RxKq
Content-Disposition: form-data; name="filename"; filename="filename.txt"
Content-Type: application/octet-stream
------WebKitFormBoundaryrhNuQUPgZKD8RxKq--