0

したがって、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);

何も発生しませんが、ファイルの名前は完全に破損しています。それを機能させるにはどうすればよいですか?

4

1 に答える 1

1

これを行うためのポータブルでクロスブラウザの方法はありません。

動作するserver/browser / headersの組み合わせについては、http: //greenbytes.de/tech/tc2231/の表を参照してください。

最善の策は、送信するだけで、ブラウザがURI部分Content-Disposition: attachmentから「デフォルト」のファイル名を取得できるようにすることです。/path/file.ext

于 2012-07-02T07:53:15.820 に答える