ashx中的Server.MapPath?

时间:2013-10-04 13:47:45

标签: c# asp.net

我有一个提供PDF文档的ashx文件。我们的环境是我们在本地开发的,Web应用程序被移动到不同的环境:测试然后生产。

访问服务器上的路径的最佳方法是什么?如何在.ashx处理程序中使用Server.MapPath()

3 个答案:

答案 0 :(得分:15)

您可以通过Server访问HttpContext

public void ProcessRequest(HttpContext context) {

    context.Server.MapPath(...);
}

答案 1 :(得分:11)

我想在场景中添加另一个案例

案例一:

例如,如果您知道要部署的路径,并且这不在您的应用程序的上下文中: 从VS 2010开始,您可以添加web.config transform,具体取决于您的构建配置

为了保持简单,您可以拥有web.debug.config(让我们假设开发)和web.release.config(生产),或者如果需要,您可以将自己的构建配置设置为web.production.config。 / p>

您可以创建一个应用程序设置来引用文件夹的完整路径,并根据您要部署的环境进行转换

类似

<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() 

答案 2 :(得分:4)

如果PDF文件存储在存储ashx的子目录中,则可以使用~作为应用程序的根目录:

public void ProcessRequest (HttpContext context) {
// ...
    context.Response.WriteFile("~/PDFs/onefile.pdf");
}

如果您的文件位于不是虚拟目录的物理文件夹中,则可以将该路径存储在Web.Config中(在开发,测试和生产中使用不同的配置)