3

asp.net mvc3を使用しており、同じブラウザー(Chrome 22)でファイルをダウンロードします。コントローラコードは次のとおりです。

[HttpPost]
public ActionResult Uploadfile(HttpPostedFileBase file)//HttpPostedFileBase file, string excelSumInfoId)
{
    ...
    return File(
        result.Output,
        "application/vnd.ms-excel",
        String.Format("{0}_{1:yyyy.MM.dd-HH.mm.ss}.xls", "Суммирование", DateTime.Now));
}

開発マシンに、プログラムで作成された正しい名前のファイル「Суммирование_2012.10.18-13.36.06.xls」をダウンロードします。

応答:

Content-Disposition:attachment; filename*=UTF-8''%D0%A1%D1%83%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_2012.10.18-13.36.06.xls
Content-Length:203776
Content-Type:application/vnd.ms-excel
Date:Thu, 18 Oct 2012 09:36:06 GMT
Server:ASP.NET Development Server/10.0.0.0
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0

そして、本番サーバーから、コントローラーのアクションの名前と正しい拡張子「Uploadfile.xls」のファイルをダウンロードしますが、これは間違っています。

応答:

Content-Disposition:attachment; filename="=?utf-8?B?0KHRg9C80LzQuNGA0L7QstCw0L3QuNC1XzIwMTIuMTAuMTgtMTMuMzYu?=%0d%0a =?utf-8?B?NTUueGxz?="
Content-Length:203776
Content-Type:application/vnd.ms-excel
Date:Thu, 18 Oct 2012 09:36:55 GMT
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0
X-Powered-By:ASP.NET

Web.configファイルは両方のマシンで同じです。

同じブラウザでファイル名のエンコードが異なるのはなぜですか?不足しているマシンで異なるweb.configのデフォルト設定はありますか?

4

2 に答える 2

3

開発サーバーは .NET 4 を実行しており、運用サーバーは .NET 4.5 を実行しています。MVC フレームワークには、Content-Disposition ヘッダーに RFC 6266 を使用する必要があるかどうかを判断するためのヒューリスティックが含まれています。このヒューリスティックは .NET 4 では正しく機能しますが、.NET 4.5 では正しく機能しません。最終結果は、このインスタンスで目撃しているように、Content-Disposition ヘッダーが破損することです。

おそらく最も簡単な方法は、アプリケーションを MVC 4 にアップグレードすることです。このバージョンのフレームワークには、より堅牢で、.NET 4 と .NET 4.5 の両方で正しく動作する別のヒューリスティックが含まれています。

于 2012-10-18T16:57:18.240 に答える
0

最も可能性の高い理由は、サーバーが実際に異なるUser-Agentヘッダーフィールドを認識していることであると思われます。

そうは言っても、2番目の応答はどのブラウザでも正しくないため、その問題をMicrosoftに報告する必要があります。

于 2012-10-18T14:29:26.810 に答える