ブラウザが理解できるファイルタイプをブラウザで直接開く必要があります(つまり、[開く/保存/キャンセル]ダイアログはありません)。
これが私のコードです。現在はうまく機能しています!...すべてのファイルがダイアログボックスをポップアップし、ファイルを直接開かないことを除いて:
string filePath = Path.Combine(WebConfigurationManager.AppSettings["NewsAttachmentPath"], context.Request.QueryString["FileName"]);
byte[] bytes = System.IO.File.ReadAllBytes(filePath);
context.Response.Clear();
context.Response.ContentType = "application/octet-stream";
context.Response.Cache.SetCacheability(HttpCacheability.Private);
context.Response.Expires = -1;
context.Response.Buffer = true;
context.Response.AddHeader("Content-Disposition", string.Format("{0};FileName=\"{1}\"", "inline", context.Request.QueryString["FileName"]));
context.Response.BinaryWrite(bytes);
context.Response.End();
ご覧のとおり、Content-Dispositionを「inline」に変更しても、ダウンロードを求めるプロンプトが表示されます。これは、ブラウザが理解できることがわかっているファイルを使用したものです。つまり、ランダムなサイトに移動してPDFをクリックすると、ブラウザで開きます。私のサイトでは、表示するために保存します。
「なぜapplication/octet-streamを使いたいのか」に対する先制的な答え 単一のファイルタイプごとにハンドラーを作成したくないからです。これが間違っている場合は、私に知らせてください。