我在一个单独的线程上做一些异步工作:
ThreadPool.QueueUserWorkItem()
Run Code Online (Sandbox Code Playgroud)
在这个单独的线程中,我需要调用HttpContext.Current以便我可以访问:
HttpContext.Current.Cache
HttpContext.Current.Server
HttpContext.Current.Request
Run Code Online (Sandbox Code Playgroud)
但是,HttpContext.Current当我创建这个单独的线程时,它为null.
如何创建新线程以使其HttpContext.Current不为空?或者是否有另一种方法可以访问Cache,Server和Request对象?
我有一些使用HostingEnvironment.MapPath我想要进行单元测试的代码.
如何设置HostingEnvironment以便它返回路径而不是null我的单元测试(mstest)项目?
我想在单元测试中加载外部XML文件,以测试该XML上的一些处理代码.如何获取文件的路径?
通常在Web应用程序中我会这样做:
XDocument.Load(Server.MapPath("/myFile.xml"));
Run Code Online (Sandbox Code Playgroud)
但显然在我的单元测试中我没有引用Server或HttpContext,那么如何映射路径以便我不必指定完整路径?
更新:
我只想说明我实际测试的代码是针对XML解析器类的,类似于:
public static class CustomerXmlParser {
public static Customer ParseXml(XDocument xdoc) {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
所以为了测试这个,我需要解析一个有效的XDocument.正在测试的方法不会访问文件系统本身.我可以直接在测试代码中从String创建XDocument,但我认为从文件加载它会更容易.
为什么filePath为null?有关如何获取相对filePath的任何想法?
internal sealed class Configuration : DbMigrationsConfiguration<MvcProject.Models.FileDb>
{
public Configuration()
{
// code here is not relevant to question
}
protected override void Seed(MvcProject.Models.FileDb context)
{
string filePath = System.Web.HttpContext.Current.Server.MapPath("~/Content/File.txt");
// read File.txt using filePath and update the database
}
}
Run Code Online (Sandbox Code Playgroud)
我在ASP .NET MVC项目上设置实体框架时创建的Migrations文件夹中的Configuration.cs文件中有上述代码
当我在包管理器控制台中运行"Update-Database -Verbose"时,我收到一个错误,即filePath为null.
如果我手动设置filePath与文件的绝对URL:
string filePath = "C:/Users/User1/My Documents/Visual Studio 2012/Projects/MvcProject/Content/File.txt";
Run Code Online (Sandbox Code Playgroud)
一切正常.
显然,目标是建立一个相对路径,以便在不同的设置上与不同的开发人员一起工作.
真相被告知所有我需要的是文件 - 不一定是路径.任何帮助将不胜感激.