IE не устанавливает cookie при возврате File () из ActionResult - PullRequest
0 голосов
/ 21 июня 2019

Итак, у меня проблема с тем, что файл cookie не устанавливается после возврата файла, происходящего только в IE.

Логика следующая:

  1. При первом посещении страницы им возвращается вид
  2. Пользователь отправляет форму и документ генерируется
    2.а Если генерация файла успешна: он возвращает файл для загрузки пользователем.
    2.b. Если генерация файла не удалась: он возвращает сообщение об ошибке.

В обоих случаях 2 : на странице должно отображаться сообщение из-за установленного файла cookie - однако оно показывает сообщение только при сбое файла, а не при возврате файла для загрузки.

Мой код выглядит примерно так:

public ActionResult MyAction(string parm) {
    if (parm != null) {
        // generate file and message
        byte[] generatedFile = GenerateCsvFile(parm, out bool success, out string message);

        // Set cookie with message saying it failed or succeeded
        Response.Cookies.Add(new HttpCookie("downloadedFile", message) {
            Expires = DateTime.Now.AddSeconds(60)
        });

        if (success) { // return file for user to download
            return File(generatedFile, "text/csv", "MyDocument.csv");
        }
        return new HttpStatusCodeResult(204); // do nothing because it failed
    }

    // Initial view load
    return View();
}

Что здесь происходит и как мне это исправить?

1 Ответ

0 голосов
/ 21 июня 2019

Сообщение о результате, когда файл был возвращен, содержало символы, которые были недопустимы для помещения в cookie-файл, читаемый IE (но читаемый Chrome, Firefox и т. Д.).
Поэтому исправление состояло в том, чтобы URL кодировал его перед установкой в ​​качествепеченье.

Response.Cookies.Add(
    new HttpCookie("downloadedFile", System.Web.HttpUtility.UrlEncode(message)) {
        Expires = DateTime.Now.AddSeconds(60)
    });
...