6

PDF ドキュメントを提供する ashx ファイルがあります。私たちの環境はローカルで開発されており、Web アプリはさまざまな環境 (テスト環境と本番環境) に移動されています。

サーバー上のパスにアクセスする最良の方法は何ですか? Server.MapPath().ashx ハンドラーで使用するにはどうすればよいですか。

4

3 に答える 3

16

Serverから にアクセスできますHttpContext

public void ProcessRequest(HttpContext context) {

    context.Server.MapPath(...);
}
于 2013-10-04T14:19:00.580 に答える
13

シナリオに別のケースを追加したい

ケース 1:

たとえば、展開するパスがわかっているが、これがアプリケーションのコンテキストにない場合: 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>

ケース2: あなたが言及したようにサーバーmapPathを使用する

System.Web.HttpContext.Current.Server.MapPath() or context.Server.MapPath() 
于 2013-10-04T19:40:26.237 に答える
4

PDF ファイルが ashx が保存されているサブディレクトリに保存されている場合は~、アプリケーションのルートとして次を使用できます。

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

ファイルが仮想ディレクトリではない物理フォルダーにある場合は、パスを Web.Config に保存できます (開発、テスト、および運用で異なる構成を使用)。

于 2013-10-04T14:16:41.217 に答える