JavaScript帖子请求回调,从.NET MVC控制器重定向



我正在将PayPal结帐与E-COM解决方案集成在一起,而PayPal成功创建PayPal订单/付款后,我进行了一些服务器端处理,最终返回RedirectResult(使用URL付款失败或相应地从我的控制器中返回客户/前端。

我有以下代码,并且期望它会自动重定向,但没有重定向。

paypal.Buttons({
    createOrder: function (data, actions) {
        return actions.order.create({
            intent: "CAPTURE",
            purchase_units: [{
                amount: {
                    value: '5.20',
                }
            }]
        });
    },
    onApprove: function (data, actions) {
        return actions.order.capture().then(function (details) {
            return fetch('/umbraco/surface/PayPalPayment/process', {
                method: 'post',
                redirect: 'follow',
                body: JSON.stringify({
                    OrderID: data.orderID,
                    PayerID: data.payerID,
                }),
                headers: {
                    'content-type': 'application/json'
                }
            });
        }).catch(error=>console.log("Error capturing order!", error));
    }
}).render('#paypal-button-container');

如果我将下面的代码明确重定向,则操作将执行。

onApprove: function (data, actions) {
        return actions.order.capture().then(function (details) {
            return fetch('/umbraco/surface/PayPalPayment/process', {
                method: 'post',
                redirect: 'follow',
                body: JSON.stringify({
                    OrderID: data.orderID,
                    PayerID: data.payerID,
                }),
                headers: {
                    'content-type': 'application/json'
                }
            }).then(function () { window.location.replace('https://www.google.co.uk') });
        }).catch(function (error) {
            console.log("Error capturing order!", error);
            window.location.replace('https://www.bbc.co.uk');
        });
    }

基本上,我想知道为什么提取重定向不遵循我的控制器返回的重定向。控制器重定向以完整完整:

return new RedirectResult("/checkout/thank-you") ;

让我尝试重塑您的问题

您想知道为什么浏览器在您进行fetch后没有重定向 - 即使fetch API响应是RedirectResult

原因很简单,您在fetch中提出了一个请求,这意味着您正在提出AJAX请求(因此浏览器不会更改)

您将redirect设置为follow,这意味着在第一个请求之后(即在从中获得响应后 /umbraco/surface/PayPalPayment/process),它将遵循到URL /checkout/thank-you因此,您在then()中获得的将是/checkout/thank-you

的响应

总的来说,它确实遵循了响应,但也许不是您的预期方式(遵循AJAX请求,而不是浏览器更改页面)

如果您想要的是重定向到特定页面,那么成功呼叫/umbraco/surface/PayPalPayment/process

然后做:

  1. 修改您的后端以返回URL的JsonResult,而不是RedirectResult
return Json(new {redirectUrl = "/checkout/thank-you"});
  1. 使用then重定向
// other code omitted
.then(function (response) { return response.json(); })
.then(function (data) {window.location.replace(data.redirectUrl)});

相关内容

  • 没有找到相关文章

最新更新