Microsoft Web API文件上传到Post方法

时间:2016-05-02 12:04:01

标签: c# asp.net-web-api

我想将图像作为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。

我做错了什么?

2 个答案:

答案 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--