我有一个提供 PDF 文档的 ashx 文件。我们的环境是我们在本地开发,而 Web 应用程序移动到不同的环境:测试然后生产。
访问服务器上的路径的最佳方法是什么?如何Server.MapPath()
在 .ashx 处理程序中使用。
您可以Server
通过HttpContext
.
public void ProcessRequest(HttpContext context) {
context.Server.MapPath(...);
}
我想在场景中添加另一个案例
案例一:
例如,如果您知道要部署的路径并且这不在应用程序的上下文中:从 VS 2010 开始,您可以根据构建配置添加web.config 转换
为简单起见,您可以拥有 web.debug.config(假设开发)和 web.release.config(生产),或者您可以根据需要将自己的构建配置设置为 web.production.config。
您可以创建一个应用程序设置来引用文件夹的完整路径,并根据您要部署的环境进行转换
就像是
<appSettings>
<add key="folderPath" value="c:\dev" />
// other keys here
</appSettings>
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings>
<add key="folderPath" value="c:\production" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
</configuration>
案例二: 使用您提到的服务器 mapPath
System.Web.HttpContext.Current.Server.MapPath() or context.Server.MapPath()
如果 PDF 文件存储在存储 ashx 文件的子目录中,则可以将~
其用作应用程序的根目录:
public void ProcessRequest (HttpContext context) {
// ...
context.Response.WriteFile("~/PDFs/onefile.pdf");
}
如果您的文件位于不是虚拟目录的物理文件夹中,则可以将路径存储在 Web.Config 中(在开发、测试和生产中使用不同的配置)