【问题标题】:Server.MapPath in ashx?ashx 中的 Server.MapPath?
【发布时间】:2013-10-11 13:13:18
【问题描述】:

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

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

【问题讨论】:

  • 您知道要在生产中部署的物理路径吗?

标签: c# asp.net


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您可以通过HttpContext 访问Server。

    public void ProcessRequest(HttpContext context) {
    
        context.Server.MapPath(...);
    }
    

    【讨论】:

      【解决方案3】:

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

      案例一:

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

      为了简单起见,您可以拥有 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() 
      

      【讨论】:

        猜你喜欢
        • 2010-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        • 1970-01-01
        • 2014-02-01
        • 1970-01-01
        • 2015-09-22
        相关资源
        最近更新 更多