c# - 单元测试时 HttpRequestMessage Content Disposition null

标签 c# unit-testing

我正在尝试为自定义 MultipartMemoryStreamProvider 编写测试 - 一个与此非常相似的 MultipartFormDataMemoryStreamProvider.cs

特别是,我正在尝试测试我自己对 GetStream(HttpContent parent, HttpContentHeaders headers) 方法的实现。

它需要一个 HttpContent 和 HttpContentHeaders。

为了实现这一点,我试图创建一个 Controller 上下文和 Controller ,然后从该 Controller 请求中传递适当的属性。

事实上,我已经尝试实现这个(重复)问题的答案:Testing a Web API method that uses HttpContext.Current.Request.Files?

我尝试的所有操作都会导致 header 上的 Content-Dispositionnull 如下图所示:

enter image description here

enter image description here

知道我错过了什么吗?

为了代码的缘故,这里是代码的副本。您会注意到它与另一个问题的答案中的相同。我就是无法通过 null 内容处置。

  var content = new ByteArrayContent(new Byte[100]);
        content.Headers.Add("Content-Disposition", "form-data");
        var controllerContext = new HttpControllerContext
        {
            Request = new HttpRequestMessage
            {
                Content = new MultipartContent { content }
            }
        };
        var controller = new MockController();
        controller.ControllerContext = controllerContext;

MockController 很简单:

public class MockController : ApiController { }

最佳答案

如果您希望 Content-Disposition header 出现在 MultipartContent 中,您应该在 MultipartContent 而不是 ByteArrayContent 中设置>.

但是如果你想模拟从网页上传文件,你需要在 ByteArrayContent 上设置 Content-Disposition header 。在这种情况下,要查看 Content-Disposition 的值,您需要遍历 MultipartContent 的内部内容:

var multipart = await Request.Content.ReadAsMultipartAsync();
foreach (var content in result.Contents)
{
     var contentDisposition = content.Headers.ContentDisposition;
}

您可以查看此教程:Sending HTML Form Data in ASP.NET Web API .它可能有点过时,但它展示了这个想法。

编辑:刚刚检查过,它似乎与您在问题中引用的答案中提到的教程相同。

关于c# - 单元测试时 HttpRequestMessage Content Disposition null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44073646/

相关文章:

unit-testing - 在 Golang 中进行单元测试时如何测试是否调用了 goroutine?

unit-testing - 测试自定义 redux 中间件

c# - 尽管正确设置了绑定(bind)重定向,但无法在运行时加载程序集

c# - 带有空测试的 NHibernate JoinAlias 查询不起作用

c# - 等待来自不同类(class)的任务

c# - ASP.NET MVC Core 级联下拉列表

c# - 如何点击网站上的按钮?

使用数据库进行 Phpunit 测试

java - 如何在 Java 中实现构建特定的注解保留

c# - 回调函数 : passing callbacks from a C# winform app to a referenced VC++ Exe