Тест XUnit для загрузки файла вызывает исключение, хотя конечная точка работает при использовании на моем сайте - PullRequest
0 голосов
/ 08 января 2020

Использование бессонницы для создания кода с помощью RestSharp:

var client = new RestClient("https://localhost:44372/api/Box/Upload");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001");
request.AddParameter("multipart/form-data; boundary=---011000010111000001101001", "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"LiterallyAnything\"\r\n\r\n", ParameterType.RequestBody);
request.AddFile("MyFileName", "MyFileAndPath");
IRestResponse response = client.Execute(request);

Это просто соответствует конечной точке. net Core 2.1:

[HttpPost("Upload")]
[ProducesResponseType(typeof(ActionResult), 201)]
[ProducesResponseType(typeof(ActionResult), 400)]
[ProducesResponseType(typeof(ActionResult), 500)]
public async Task<IActionResult> Upload() {
    ActionResult retVal = StatusCode(500);
    try {
        if (Request.Form.Files.Count() != 1) { //<----Throws exception here

Я получаю следующую ошибку:

Unexpected end of Stream, the content may have already been read by another component.

Я проверил, есть ли какая-то блокировка файла (нет). Файл абсолютно существует. Похоже, он не очень хорошо справляется с этим при запуске из модульного теста.

Что дает?

1 Ответ

1 голос
/ 09 января 2020

Когда вы используете любую перегрузку IRestRequest.AddFile, он добавляет к запросу специальный тип параметра, называемый FileParameter. Когда RestClient обнаружит, что список файлов в запросе не пуст, он автоматически сформирует для вас запрос из нескольких частей и установит все необходимые заголовки.

В общем, очень Небольшое количество случаев, когда вам нужно вручную добавлять заголовки и технические параметры в ваши запросы при использовании RestSharp. Следовательно, нигде в документации мы не добавляем такие вещи, как тип контента, в заголовки запроса, поскольку это всегда выполняется автоматически для вас на основе параметров запроса, тела, файлов и т. Д.

Что касается клиента Insomnia, они используйте инструмент httpsnippet из Kong для генерации фрагментов кода. Это их код для RestSharp, который чрезвычайно прост c и определенно не соответствует нашему рекомендуемому использованию, поэтому я рекомендовал бы проверить наши документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...