Кодирование имени файла размещения содержимого на сервере разработки

Я использую 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, которые отличаются на компьютерах, которые мне не хватает?

2 ответа

Решение

Сервер разработчика работает под управлением.NET 4, а рабочий сервер работает под управлением.NET 4.5. Инфраструктура MVC содержит эвристику для определения необходимости использования RFC 6266 для заголовка Content-Disposition, и хотя эта эвристика работает правильно в.NET 4, она не работает корректно в.NET 4.5. Конечный результат заключается в том, что заголовок Content-Disposition искажается, как вы видите в этом случае.

Ваш самый простой способ действий, вероятно, состоит в том, чтобы обновить приложение до MVC 4. Эта версия платформы содержит другую эвристику, которая является более надежной и должна корректно работать как в.NET 4, так и.NET 4.5.

Скорее всего, причина в том, что сервер действительно видит разные поля заголовка User-Agent.

При этом второй ответ не подходит для любого браузера, и вы должны сообщить об этой проблеме в Microsoft.

Другие вопросы по тегам