Как также можно изменить URL в случае, если я верну FileStreamResult?
Вы можете вернуть HTML, чтобы сделать это:
public IActionResult Redirect1()
{
<strike>var r = RedirectToAction(nameof(GetStream));</strike>
<strike>return r; </strike>
<b>var url = this.Url.Action(nameof(GetStream)); </b>
return <b>Content(
$"<script>history.pushState({{}},'downloading','{url}');history.go()</script>",
"text/html"
);</b>
}
Ключ заключается в написании магии из JavaScript, так что вы можете изменять поведение браузера по своему усмотрению.
Возможно иметь что-то в представлении, например "ожидание ...", и возвращать FileStreamResult
Опять же, вы можете сделать это с помощью содержимого HTML.Допустим, вы хотите отобразить сообщение waiting...
и запустить загрузку за 1 секунду:
public IActionResult Redirect1()
{
var url = this.Url.Action(nameof(GetStream));
return Content($"<div id='msg'>waiting...</div><script>history.pushState({{}},'downloading','{url}'); setTimeout(function(){{document.getElementById('msg').textContent='';history.go();}}, 1000);</script>","text/html");
}
Что если ваш JavaScript станет более сложным?Просто создайте cshtml
View и поместите содержимое в файл View.