javascript - 为什么 Fetch POST 请求后 RedirectToAction 不返回 new View()?

标签 javascript fetch asp.net-core-2.2

我正在使用Asp.Net Core 2.2

我不明白为什么在 Fetch POST 调用之后,我的 POST IActionResult 没有重定向到另一个操作及其 View ?

我在 JS 中的获取:

window.onload = function () {
        var requestToken = document.getElementsByName("__RequestVerificationToken")[0].value
        fetch('http://localhost:53801/User/Checkout', {
            method: 'post',
            headers: {
                "X-ANTI-FORGERY-TOKEN": requestToken,
                "Content-Type": "application/json",
                "Accept": "application/json"
            },
            body: JSON.stringify({
                token: 'sometoken',
                payerID: 'someid',
                amount: price,
                users: usersQty,
                years: yearsQty
            })
        }).catch(function (err) {
            console.log(`error: ${err}`);
            });
    }

我的发布操作:

[HttpPost]
        [Authorize]
        public async Task<IActionResult> Checkout([FromBody] TransactionCompletedModel transaction)
        {
            AppUser user = await _userManager.GetUserAsync(User);
            if (user != null)
            {
                if (user.PremiumExpiring == null || user.PremiumExpiring < DateTime.UtcNow)
                {
                    user.PremiumExpiring = DateTime.UtcNow.AddYears(1); //if not yet have full access
                }
                else
                {
                    user.PremiumExpiring = user.PremiumExpiring.AddYears(1); //if already have full access
                }

                await _userManager.UpdateAsync(user);
            }

            return RedirectToAction(nameof(TransactionCompleted));
        }

以及应该返回新 View 的方法,但它没有:

[Authorize]
        public IActionResult TransactionCompleted()
        {

            return View();
        }

执行 Fetch 调用后,我在浏览器控制台中收到:

XHR GET http://localhost:53801/User/TransactionCompleted [HTTP/1.1 200 OK 724ms]

据我了解,我的 RedirectToAction 没有任何问题,那么为什么 public IActionResult TransactionCompleted() 不返回/重新加载新 View ,只是我坚持使用旧 View 查看,Fetch 调用在哪里执行?

最佳答案

根据 Christoph Lütjen 的建议,我必须修改我的 Controller POST 操作以返回 URL:

[HttpPost]
        [Authorize]
        public async Task<IActionResult> Checkout([FromBody] TransactionCompletedModel transaction)
        {
            //other rows without change

            return Ok("TransactionCompleted?token=" + transaction.Token);
        }

现在,我的 Fetch API 调用从 POST 调用获取对 Checkout 的响应,并将其用于重定向:

var requestToken = document.getElementsByName("__RequestVerificationToken")[0].value
        fetch('http://localhost:53801/User/Checkout', {
            method: 'post',
            headers: {
                "X-ANTI-FORGERY-TOKEN": requestToken,
                "Content-Type": "application/json",
                "Accept": "application/json"
            },
            body: JSON.stringify({
                token: 'sometoken',
                payerID: 'someid',
                amount: price,
                users: usersQty,
                years: yearsQty
            })
        })
            .then((response) => { return response.json(); })
            .then((result) => { window.location = result })
            .catch(function (err) {
            console.log(`error: ${err}`);
            });

关于javascript - 为什么 Fetch POST 请求后 RedirectToAction 不返回 new View()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60383686/

相关文章:

javascript - 如何从React JS中的react项目中的公共(public)目录中的文件读取xml?

python - 如何使用 Python 从 JSON 获取单个键的值列表

c# - 使用 IPageRouteModelConvention 时获取版本

javascript - 将 div 附加到响应式父 div

sql - mysql - 从一个表中选择所有内容,并从另一个表中选择一列,其中找到 $var

c# - 如何在另一个位置创建数据库而不是默认哺乳 c :\Users\USER in ASP. NET Core 2.2

c# - .Net Core 2.2 Web API 路由

javascript - 运输计算器,此代码中我缺少什么才能使其正常工作?

javascript - Chrome 在 ckeditor 中使用 insertHtml 跳过 contenteditable 属性

javascript - 使用 javascript 展开/折叠 zk 面板