C# 用于文件上载的XUnit测试会导致异常,尽管端点在我的站点中使用时可以工作

C# 用于文件上载的XUnit测试会导致异常,尽管端点在我的站点中使用时可以工作,c#,api,restsharp,asp.net-core-2.1,C#,Api,Restsharp,Asp.net Core 2.1,使用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("

使用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
我已经检查过了,看看有没有什么文件锁。该文件绝对存在。在单元测试中运行时,它似乎处理得不太好


给出了什么?

当您使用IRestRequest.AddFile的任何重载时,它将向请求添加一种特殊类型的参数,称为FileParameter。当RestClient发现请求中的文件列表不是空的时,它将自动为您形成一个多部分表单请求,并设置所有必要的头

通常,在使用RestSharp时,很少有情况需要手动向请求中添加标题和技术参数。因此,在文档中,我们没有向请求头添加内容类型之类的内容,因为它总是根据请求参数、正文、文件等自动完成


关于失眠客户端,他们使用来自Kong的httpsnippet工具生成代码片段。对于RestSharp,它非常简单,绝对不适合我们推荐的用法,因此我建议检查我们的。

请分享您的测试方法,以便我们能够更好地重现和解决问题。此外,请不要只测试开发人员控制范围内的代码,他们不应该测试基础设施问题。编写文件上传会更好。第一段代码实际上是测试sans断言。我们也在前后运行一个实际的自动化测试,因为它将通过Box.com API SDK上传到我们的端点,该SDK有垃圾文档,在更新时有大量破坏性的更改,我们经常有破坏性的网络更改,像这样的完整测试将告诉我们网络是否发生了更改,原因是代码更改或Box.com API更改。我知道这里的最佳实践,但这不是我所问的,尽管我很理解这种担心。如果AddFile自动为您完成所有操作,为什么要向请求中添加头?…等等,是吗?BRB,我去看看。要直接回答这个问题,代码是由失眠生成的,而这些调用在失眠中工作。所以,也许真正的问题是,为什么他们要生成头文件而不是一个AddFile???@AlexeyZimarev,把它作为一个答案。删除此选项可修复此问题。谢谢。当我收紧代码时,我很感激这个链接。
Unexpected end of Stream, the content may have already been read by another component.