Изменение 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, путем изменения конфигурации маршрута.