Метод WebAPI с файлом и телом - PullRequest
0 голосов
/ 24 января 2019

У меня есть метод WebAPI, как показано ниже.Загрузка файла прекрасно работает с этим, но мне также нужен дополнительный объект с информацией о том, как обращаться с файлом.Что я пробовал до сих пор:

//Works fine but no body defined
[HttpPut("{id}")]
public IActionResult Put(string id, IFormFile file)
{
    //Do stuff
    return StatusCode(200);
}

и

public class UploadFile
{
    //As simple example
    public string Description { get; set; }
    public Dictionary<string, string> Keys { get; set; }
}

//What I would like to have, but doesn't work
[HttpPut("{id}")]
public IActionResult PutTest(string id, IFormFile file, [FromBody] UploadFile info)
{
    //Do stuff
    return StatusCode(200);
}

, используя SwaggerUI со следующим вводом:

enter image description here

Я получаю 400 Bad Request с сообщением "The input was not valid.".SwaggerUI показывает следующий cURL для запроса (который, кажется, не содержит никакой информации о теле):

curl -X PUT "https://localhost:5001/api/Document/test/test.txt" -H  "accept: application/json" -H  "Content-Type: multipart/form-data" -d {"file":{}}

Как мне лучше всего подойти к этому, чтобы получить желаемый результат?

1 Ответ

0 голосов
/ 24 января 2019

Вы пытались обернуть IFormFile и свой UploadFile в модель единого представления:

public class FileViewModel{ 
    public UploadFile UploadFile{get;set;} 
    public IFormFile File {get; set;}
}

затем

[HttpPut("{id}")]
public IActionResult PutTest(string id, FileViewModel vm)
{
//Do stuff
return StatusCode(200);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...