我正在尝试为自定义 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-Disposition
为 null
如下图所示:
知道我错过了什么吗?
为了代码的缘故,这里是代码的副本。您会注意到它与另一个问题的答案中的相同。我就是无法通过 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/