Server.MapPath in ashx?

7

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

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


你知道你将在生产环境中部署的物理路径吗? - pedrommuller
3个回答

17

您可以通过HttpContext访问Server

public void ProcessRequest(HttpContext context) {

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

13

我想为这种情况添加另一种处理方式:

第一种情况:

比如,如果你知道如何部署而且这不是在应用程序的上下文中: 从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() 

4

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接