Я делаю что-то не так?
Согласно в официальной документации все правильно.
https://restsharp.dev/docs/next/usage/r ... ding-files
Я нашел следующее: Вопрос по Stackoverflow, но он немного устарел и не соответствует текущей версии RestSharp.
RestSharp AddFile с использованием Stream
Тест:
Код: Выделить всё
[Fact]
public async Task Upload_ShouldWork()
{
//Arrange
await this._fixture.Login();
FileStream stream = File.OpenRead("C:\\Users\\Franz Seidl\\OneDrive\\Bilder\\testImage.png");
//Act
var result = await this._testClass.Upload(stream, 1, true);
//Assert
result.Should().BeTrue();
}
Код: Выделить всё
public async Task Upload(Stream fileStream, int id, bool force = false)
{
var request = new RestRequest($"{BaseUrl}Upload/{{id}}");
var fileParam = FileParameter.Create("upload",() => fileStream,"upload.png");
request.AddUrlSegment("id", id.ToString());
request.AddQueryParameter("force", force.ToString());
request.AddFile("upload.png", () => fileStream,"upload.png", ContentType.Binary);
var result = await this._client.PostAsync(request);
return result;
}
Код: Выделить всё
[HttpPost("Upload/{id}")]
public async Task UploadImage([FromRoute] int id, [FromQuery] bool force=false)
{
try
{
if (Request.ContentLength == 0 && Request.Body != null) throw new ArgumentException("No file provided");
var fileStream = Request.Body;
var result = await this._service.Upload(fileStream,id,force);
return result;
}
catch (ArgumentException e)
{
var errorDTO = this._exceptionHandler.HandleExceptionAndCreateDTO(e);
return this.BadRequest(errorDTO);
}
catch (Exception e)
{
var errorDTO = this._exceptionHandler.HandleExceptionAndCreateDTO(e);
return StatusCode(StatusCodes.Status500InternalServerError, errorDTO);
}
}
Еще одна интересная деталь при отправке запроса на почтальона: Request.ContentLength равен 1444 то же значение, что и FileStream.
Но при отправке с помощью RestSharp Request.Content равен 1643.
Возможно, файл закодирован неправильно.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ntain-file