[英]C# Test File Upload
我浏览了各种帖子并尝试了几件事但我无法让事情正常进行。 我不觉得应该那么难,但这就是我得到的。 我只想将文件发布到我的服务器以进行测试。 它应该像我从网页上的标准<input type="file"/>
上传它一样工作。
这是我想要测试的实际处理程序:
[Route("MyAction")]
[HttpPost]
public IHttpActionResult MyAction()
{
try
{
var request = HttpContext.Current.Request;
if (request.Files.Count == 1)
{
var postedFile = request.Files[0];
if (request.Files[0].FileName.EndsWith(".zip"))
{
// unzip the file
// do stuff
}
}
}
catch
{
return new ValidationError("An error has occurred and has been logged");
}
}
这是我的测试:
public void SetupServer()
{
server = TestServer.Create(app =>
{
var startup = new Startup();
startup.ConfigureOAuth(app);
var config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);
});
}
[Test]
public async Task MyActionTest()
{
SetupServer();
Uri = "/api/myClass/myRoute";
var file = Properties.Resources.myZipFile;
var boundary = "------------------------" + DateTime.Now.Ticks;
var multipartFileContent = new MultipartFormDataContent(boundary);
var content = new ByteArrayContent(file);
content.Headers.Add("Content-Type", "application/octet-stream");
multipartFileContent.Add(content, "myFileName", "myZipFile.zip");
var serverResp = (await server.CreateRequest(Uri)
.And(req => req.Content = multipartFileContent)
.PostAsync());
}
运行此测试会导致var request = HttpContext.Current.Request;
出错var request = HttpContext.Current.Request;
因为HttpContext.Current
由于某种原因是null。 我是以错误还是艰难的方式解决这个问题? 我觉得不应该这么困难。
根本问题与HttpContext.Current的工作原理有关。 这个属性在ASP.NET框架中是“神奇的”,因为它对于请求 - 响应操作是唯一的,但是在执行需要时在线程之间跳转 - 它在线程之间有选择地共享。
当您在ASP.NET处理管道之外使用HttpContext.Current时,魔力消失了。 当您使用异步编程样式切换线程时,该属性在继续之后为null。 http://www.necronet.org/archive/2010/07/28/unit-testing-code-that-uses-httpcontext-current-session.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.