【发布时间】:2014-06-14 04:19:07
【问题描述】:
这是我的(精简的)模块
public class MyModule : NancyModule
{
public MyModule() : base("/path")
{
Get["/{filename}"] = x =>
{
var fileName = (string)x.filename;
var path = Path.Combine("files", fileName);
if (!File.Exists(path)) throw new FileNotFoundException();
return Response.AsFile(path);
}
}
}
此代码有效并成功将正确的文件传送到浏览器。
现在我已经写了一个测试:
[TestMethod, DeploymentItem("file.txt", "files")]
public void CanDownloadFile()
{
var path = @"files\file.txt";
Assert.IsTrue(File.Exists(path));
var bootstrapper = new MyBootstrapper();
var browser = new Browser(bootstrapper); // from Nancy.Testing
var result = browser.Get("/path/file.txt", with =>
{
with.HttpRequest();
});
var body = result.Body.AsString();
Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
}
使用此代码,我的测试失败,因为 StatusCode 是 NotFound 而不是 OK
我什至尝试用
替换Response.AsFile()
var info = new FileInfo(path);
return new GenericFileResponse(info.FullName);
并在执行我的测试时三次检查该文件是否确实存在于磁盘上。
有什么问题?
【问题讨论】:
-
我知道它已经很老了。但我想知道你能解决这个问题吗?
-
@KokiralaSudheer 我想我将代码更改为使用
return Response.FromStream(stream).AsAttachment(fileName, contentType);您可以使用MimeTypes.GetMimeType(filePath)找出contentType(看看来自nancy 的GenericFileResponse.cs。