したがって、HttpResponseクラスで動作します。
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
(IEのファイル名をエンコードする必要があります)しかし、今はHttpListenerに対して実行する必要があります。IEで動作します。問題は、FireFoxとChromeがIEのようにエンコードされたヘッダー値をデコードしないことですが、HttpResponse.AddHeaderは非ラテン文字(System.Netからのコード)を許可しません。
if ((ch == '\x007f') || ((ch < ' ') && (ch != '\t')))
throw new ArgumentException(SR.GetString("net_WebHeaderInvalidControlChars"), "value");
私はReflectionを使用してチェックを歩き回ろうとしました:
Type type = response.Headers.GetType();
PropertyInfo info = type.GetProperty("InnerCollection",
BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic);
NameValueCollection headers = (NameValueCollection)info.GetValue(response.Headers, null);
headers.Add(name, value);
何も発生しませんが、ファイルの名前は完全に破損しています。それを機能させるにはどうすればよいですか?