我有一些在ASP.NET MVC Web应用程序中运行时没有HttpContext的进程。该过程需要能够确定用于读取/写入数据的应用程序的目录目录的物理路径。但是,由于它没有HttpContext,所以我不会使用像Server.MapPath等花哨的东西。建议?如何确定没有HttpContext的文件的物理路径?
回答
在网站上,最好是使用HttpRuntime.AppDomainAppPath
,因为在执行路径的某些时刻(即,当网站启动时),没有HttpContext.Current
可用。
另请参阅this post。
为什么HttpRuntime.AppDomainPath比AppDomain.BaseDirectory好?' – Matt 2010-08-23 16:46:44
由于它的语义。当你进入HttpRuntime时,最好是向运行时询问正确的路径,而不是自己动手。此外,它使您的代码更具可读性,您的意图更清晰。最后,实现可能会改变,但即使在这种情况下,HttpRuntime仍然会返回正确的路径,并且AppDomain不会(同样可能适用于您已经启动分离的AppDomain的罕见情况)。 – Abel 2010-08-23 16:51:17
谢谢。我编辑上面,因为它实际上是AppDomainAppPath而不是AppDomainPath(至少在.NET4上) – Matt 2010-08-23 17:48:20
最好的办法是使用AppDomain.BaseDirectory
属性。只要你不摆弄自定义应用程序域,它就会指向你的根应用程序目录。换一种说法;这两个字符串是相同的:
string mapUsingAppDomain = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Contents");
string mapUsingServer = HttpContext.Current.Server.MapPath("~/Contents");
- 1. 如何确定DFS路径的物理文件服务器?
- 2. 如何获得知道exe文件路径的物理路径?
- 3. RewriteRule更改文件的物理路径
- 4. 如何确保文件路径有效?
- 5. 如何下载物理路径中的空Excel文件
- 6. 我无法获取选定文件的完整物理路径
- 7. 如何将Android.Net.Uri路径转换为xamarin中的物理路径?
- 8. Beanstalk中的物理路径
- 9. silverlight中的物理路径
- 10. 我如何确定正确的文件系统路径
- 11. 用户控件的物理路径(asp.net)
- 12. 如何确定给定路径是文件还是文件夹?
- 13. 我的设备上没有物理存在的目录路径
- 14. 确定文件的绝对路径vb.net
- 15. 确定数据库的文件路径
- 16. Asp.net路由掩盖路径中的物理文件夹
- 17. 如何获得没有文件路径的文件名?
- 18. 获取任何数据库的物理文件路径
- 19. Bentley ProjectWise Explorer - 如何获取物理文件路径(DMS)
- 20. 从给定文件路径获取有关物理设备的信息
- 21. 如何确定指定路径上没有图像
- 22. 获取选定文件的文件路径没有OpenFileDialog
- 23. 如何确定 - [UIImage imageNamed:]将加载的文件的路径?
- 24. 如何确定符号链接指向的文件的路径?
- 25. C++:如何在该文件的路径与给定的路径
- 26. 没有文档的路径
- 27. 如何指定flowconfig文件的路径?
- 28. C#:如何获得Process.Start在给定文件时没有路径时将使用的可执行文件路径?
- 29. 如何将物理路径转换为虚拟路径在C#
- 30. Javac无法找到.class文件,没有正确的类路径
即使'HttpContext.Current'可以为空,“Server.MapPath”仍然可以工作。如果你不“拥有”它,也许你的意思是你错过了对“System.Web”的引用? – Abel 2010-08-23 16:50:00
@Abel:由于“Server”是HttpContext.Current(也是HttpApplication的一个属性)的属性,因此您不会“引用”“服务器”来在例如静态构造函数中使用.MapPath,既不其中的这些在静态环境下将可靠地提供。 “服务器”的类型是“HttpServerUtility”,其构造函数是内部的,所以你不能使用它,除非你可以从Global.asax中的HttpContext.Current或HttpApplication中获取它。因此,HttpRuntime.AppDomainAppPath是您应该使用的内容,正如您在下面的答案中发布的那样。 – Triynko 2013-08-01 00:54:57