как добавить имя файла.pdf для URL в браузер - PullRequest
1 голос
/ 29 июля 2011

Мой метод действия контроллера возвращает файл PDF как

public FileContentResult GetPDF(string filename)
        {FileContentResult filecontent= new FileContentResult(Contents, "application/pdf");
               HttpContext.Response.AddHeader("Content-Disposition", "inline; filename=" + filename);
               return filecontent;
}

Теперь он не открывается на вкладке браузера, поэтому я хочу в конце вернуться к URL-адресу как filename.pdf, так как я могу открыть pdf на вкладке браузера. Так как я могу добавить это к существующему методу действия.

спасибо,
MichaelD

1 Ответ

2 голосов
/ 29 июля 2011

Изменение URL браузера с сервера и одновременная загрузка содержимого файла невозможны.Браузер ожидает получения результатов от URL-адреса, к которому он обращается, поэтому вы не можете изменить его после обработки файла.Таким образом, вы должны иметь обработчик для URL-адреса, заканчивающегося на «.pdf», и сделать файлы запроса браузера из этого URL-адреса, уже заканчивающиеся на «.pdf».С asp.net mvc это просто.В вашей конфигурации маршрута у вас должно быть что-то похожее на

routes.MapRoute("PdfFile",
                "DownloadFile/GetPDF/{fileName}",
                new { controller = "DownloadFile", action = "GetPDF" });

И теперь, измените маршрут, чтобы он соответствовал только тогда, когда URL заканчивается ".pdf"

routes.MapRoute("PdfFile",
                "DownloadFile/GetPDF/{fileName}.pdf",
                new { controller = "DownloadFile", action = "GetPDF" });
//note the ending .pdf at the end of the route

И если выспроектировав вашу систему для автоматического создания ссылок с использованием ActionLink или других помощников, и не создавая ссылки вручную, вы уже должны получить желаемый результат - ваши ссылки, которые теперь загружают файл, будут автоматически сгенерированы так, что заканчиваются на .pdf.

В http есть какая-то техника, когда браузеру (или вообще тому, кто делает запрос) можно сказать, что запрашиваемый им ресурс был перемещен на другой URL.Это также поддерживается asp.net mvc, возвращая RedirectToAction или аналогичный actionResults.Когда браузер получает ответ о перенаправлении, он делает еще один запрос на этот новый URL.В вашем случае это можно было использовать для перенаправления браузера на URL, заканчивающийся на «.pdf».Но ключевым моментом здесь является то, что даже в случае перенаправления, конечно, вы должны обрабатывать этот URL, заканчивающийся на «.pdf» :).Поэтому лучше избавиться от этих перенаправлений и сначала создать ссылки, которые уже указывают на желаемый URL, путем изменения конфигурации маршрута.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...