使用RestSharp上传文件时文件为空的问题排查
RestSharp上传文件为空,Postman正常,求排查
我用Post请求通过RestSharp上传文件,Postman能正常上传,但RestSharp上传的文件始终为空,是不是操作有问题?
我对照RestSharp官方文档走的流程,应该是合规的,找了Stack Overflow上的旧问题但不适用于当前版本。
测试代码
[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<bool> 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<bool>(request); return result; }
后端代码
[HttpPost("Upload/{id}")] public async Task<ActionResult<bool>> 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); } }
我把请求发到Postman MockServer后,发现两个请求的细节差异:
- Postman请求的
Request.ContentLength为1444,和文件流大小一致 - RestSharp请求的
Request.ContentLength为1643,怀疑是编码问题导致文件为空
内容的提问来源于stack exchange,提问作者Franz
相关产品推荐
相关产品推荐

