Метод отправки файла Microsoft 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);
    }

Затем я использую postman и добавил изображение в качестве двоичного файла к телу.

However httpRequest.Files.Countis 0.

Что я делаю не так?

2 ответа

  1. Попробуйте этот код выше.

    Попробуйте в клиенте 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);
    }
    

    Дополнительные сведения см. В этом руководстве

  2. При выполнении post (и application/octet-stream в части данных), а также соответствующих границ необходимо убедиться, что тип контента является составным/form-data. Это также поможет, если вы добавите заголовки / тело вашего запроса к вопросу.

    Это работает для меня:

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