Server.MapPath in ashx?

本文关键字:ashx in MapPath Server | 更新日期: 2023-09-27 18:34:06

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

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

Server.MapPath in ashx?

您可以通过 HttpContext 访问Server

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 中(在开发、测试和生产中使用不同的配置)