PDF ドキュメントを提供する ashx ファイルがあります。私たちの環境はローカルで開発されており、Web アプリはさまざまな環境 (テスト環境と本番環境) に移動されています。
サーバー上のパスにアクセスする最良の方法は何ですか? Server.MapPath()
.ashx ハンドラーで使用するにはどうすればよいですか。
Server
から にアクセスできますHttpContext
。
public void ProcessRequest(HttpContext context) {
context.Server.MapPath(...);
}
シナリオに別のケースを追加したい
ケース 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()
PDF ファイルが ashx が保存されているサブディレクトリに保存されている場合は~
、アプリケーションのルートとして次を使用できます。
public void ProcessRequest (HttpContext context) {
// ...
context.Response.WriteFile("~/PDFs/onefile.pdf");
}
ファイルが仮想ディレクトリではない物理フォルダーにある場合は、パスを Web.Config に保存できます (開発、テスト、および運用で異なる構成を使用)。