如何使用global.asax中的Server.MapPath()?


121

我需要使用Server.MapPath()合并存储在中的一些文件路径web.config

但是,由于Server.MapPath()依赖于当前的HttpContext(我认为),因此无法执行此操作。当尝试使用该方法时,即使其“可用”,我也会收到以下异常:

在这种情况下,服务器操作不可用。

是否有另一种方法可以将Web根目录相对目录映射到诸如~/App_Data/的完整物理路径C:\inetpub\wwwroot\project\App_data\

Answers:


294

您可以尝试System.Web.Hosting.HostingEnvironment.MapPath()

不需要HttpContext。


对这项技术有什么警告吗?
John Bubriski

10
不。如果启动Reflector,则会注意到Server.MapPath和Request.MapPath最终调用VirtualPath.MapPath,后者最终调用HostingEnvironment.MapPath。他们最终都在同一个地方。HostingEnvironment.MapPath切掉了中间人。
科宾

1
+1修复了一个对我有用的开源项目,然后由于HttpContext.Current.Server由于某种原因没有上下文而被炸毁,因此刚刚停止初始化。切换到此状态可使其恢复平稳运行。
克里斯·马里西奇


1

在Global.asax中时,请使用上下文对象:

context.Server.mappath()

上下文使您还可以访问会话集合,请求对象,响应对象。例如,当您要记录错误时非常有用


ContextGlobal.asax中没有保证。
Anders Tornblad '17

-3

您可以尝试HttpContext.Current.Server.MapPath(“ /”)-这就是我以前在类中引用它的方式。


2
您可以在实际上具有HttpContext的类中像这样引用它,但是我不认为global.asax有一个,因此收到了错误消息。
John Bubriski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.