Javascript 贝宝.net mvc CORS错误
我在这里学习PayPal REST教程: 我在我的控制器方法(如下)中有这个,我相信是重定向行导致了问题,前一行联系paypal获得了一个没有问题的id。payment.GetApprovalUrl()检索错误消息中列出的url:Javascript 贝宝.net mvc CORS错误,javascript,asp.net-mvc,paypal,cors,Javascript,Asp.net Mvc,Paypal,Cors,我在这里学习PayPal REST教程: 我在我的控制器方法(如下)中有这个,我相信是重定向行导致了问题,前一行联系paypal获得了一个没有问题的id。payment.GetApprovalUrl()检索错误消息中列出的url: public ActionResult CreatePayment() { var userId = _userRepository.LoggedInUserId(); var cart = _cartRepository.GetCart(userId); var
public ActionResult CreatePayment()
{
var userId = _userRepository.LoggedInUserId();
var cart = _cartRepository.GetCart(userId);
var payment = PayPalRepository.CreatePayment(GetBaseUrl(),
"sale",cart);
return Redirect(payment.GetApprovalUrl());
}
此操作方法通过paypal按钮javascript调用:
payment: function(resolve, reject) {
// Set up the payment here, when the buyer clicks on the button
var env = this.props.env;
var client = this.props.client;
var CREATE_PAYMENT_URL = 'http://localhost:3259/Payment/CreatePayment';
return paypal.request.post(CREATE_PAYMENT_URL)
.then(function (data) {
console.log('data: ' + data);
resolve(data.paymentID);
})
.catch(function (err) { reject(err); })
console.log语句从不执行,浏览器控制台显示此错误:
无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头
我将控制器标记为AllowCrossSiteJson属性(在stackoverflow上找到,将根据作者进行更新),如下所示:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var ctx = filterContext.RequestContext.HttpContext;
var origin = ctx.Request.Headers["Origin"];
var allowOrigin = !string.IsNullOrWhiteSpace(origin) ? origin : "*";
ctx.Response.AddHeader("Access-Control-Allow-Origin", allowOrigin);
ctx.Response.AddHeader("Access-Control-Allow-Headers", "*");
ctx.Response.AddHeader("Access-Control-Allow-Credentials", "true");
base.OnActionExecuting(filterContext);
}
为了克服这个错误,我做错了什么,或者没有做什么?解决方案是服务器端代码只应将payment.id作为json返回,不是授权url。错误表明失败是因为来自
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-7EL20553GB692634H
没有访问控制允许来源
响应头。您对自己的服务器端代码所做的任何更改都不会解决这个问题。无论您配置自己的服务器发送什么标题,问题是Paypal没有发送正确的标题,并且您无法让Paypal发送任何其他响应标题。因此,您的选择是从后端代码向Paypal发出请求或设置CORS代理。我一定是做错了什么。。。本教程:具有相同的基本范例和完全相同的代码行:returnredirect(paypalRedirectUrl);该教程似乎完全是关于服务器端ASP.NET MVC配置和调用Paypal API的C#代码。问题中引用的错误是由于前端JavaScript代码调用某些Paypal端点造成的。因此,您可能已经编写了一些单独的前端JavaScript代码,或者后端正在生成一些代码(该代码与问题中的JavaScript代码段不同,后者请求http://localhost:3259/Payment/CreatePayment
)。最后,你的浏览器拒绝让你的前端JavaScript代码访问来自Paypal的响应。我想问题可能是你的前端代码向http://localhost:3259/Payment/CreatePayment
正在被重定向到https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-7EL20553GB692634H
。可能是返回重定向(payment.GetApprovalUrl())代码>导致。如果是这种情况,我认为服务器端代码假定用户被导航到Paypal URL并看到响应。但是,您的前端代码似乎试图使用响应,而不是将用户导航到响应。一旦客户端收到payment.id,您将如何处理它?