无法重定向到 MVC 控制器中的外部 URL
Posted
技术标签:
【中文标题】无法重定向到 MVC 控制器中的外部 URL【英文标题】:Unable to redirect to external URL in MVC controller 【发布时间】:2019-01-14 08:33:59 【问题描述】:我正在尝试将 atom 支付网关集成到我的 MVC 项目中。即使在启用 CORS 之后,我也遇到了这个令人讨厌的错误。所以我想也许是导致问题的返回网址。所以我写了一个简单的重定向来找出真正的原因return Redirect("https://google.com");
,但我仍然遇到同样的错误。我做错了什么?
public ActionResult TransferFund()
return Redirect("https://google.com");
Failed to load https://google.com/: Response to preflight request doesn't pass
access control check: No 'Access-Control-Allow-Origin' header is present on the requested
resource. Origin 'http://localhost:25850' is therefore not allowed
access. The response had HTTP status code 405.
我已关注This 重定向
编辑
<script type="text/javascript">
$(document).ready(function ()
$('#btnatom').on('click', function ()
$.ajax(
type: 'POST',
url: "/AtomPayment/TransferFund",
data: ,
dataType: "text",
success: function (resultData) alert("Save Complete")
);
);
);
</script>
[HttpPost]
public ActionResult TransferFund()
return new RedirectResult("http://google.com");
string strURL, strClientCode, strClientCodeEncoded;
....
【问题讨论】:
Redirect to external URI from ASP.NET MVC controller的可能重复 @kgbph 那是怎么重复的?我确实写了同一行代码,但我收到了这个错误。 我可以假设您使用的是 POST(来自 js 的 ajax),而不是 GET,这就是它可能是跨域请求的原因。 这是一个重复的问题。也许接受的答案对您不起作用。我会尽力帮助你的。 @Yara TransferFund 是我通过 Jquery ajax 方法调用的 POST 方法。我刚刚发现return Redirect("https://google.com");
来自 get 操作方法,但不能从作为 post 方法的内部操作方法工作。我正在尝试从 POST 操作方法发出 GET 请求
【参考方案1】:
以防万一有人需要:
首先将您的另一个“http://example.com”重定向到另一个没有 httpMethod 的控制器(“RedirectController”)
[HttpPost]
public IActionResult TransferFund()
Return Redirect("redirect?url=http://example.com");
现在:
RedirectController.cs
RedirectController()
public IActionResult Indext()
var url = Request.Query["url"];
Return Redirect(url);
或者我们可以重定向到当前控制器 btw
【讨论】:
【参考方案2】:让我们深入了解错误:
无法加载https://google.com/:对预检请求的响应 未通过访问控制检查:没有“Access-Control-Allow-Origin” 请求的资源上存在标头。起源 'http://localhost:25850' 因此不允许访问。这 响应的 HTTP 状态代码为 405。
您遇到了Cross Domain request 问题。
出于安全原因,Google 拒绝您访问其服务器。无论您发出POST
或GET
请求,google 无法识别您的域并阻止您的跨域请求。
如果您使用 jquery,它会起作用,是的,因为您使用 java 脚本的 window.location
属性从客户端到客户端发出请求。
如果您想从您的控制器代码中重定向结果,您需要使用本地域中的地址,该地址将接受请求并且不会拒绝它。
您可以在此处阅读有关Error 405 的更多信息。
意思是:
管理员可以配置每个 Web 服务器,以便个人 方法要么允许要么不允许。例如,如果没有 网站上的交互式内容,POST 是唯一合乎逻辑的 方法是不允许的,因为用户没有选项可以输入自己的 数据并将其发送到服务器。否则,提到的错误信息 上面会出现状态码 405,通知浏览器和 它的用户认为该方法是不允许的。
【讨论】:
【参考方案3】:由于“POST”方法,您无法在“TransferFund”方法中进行重定向。从 jquery 做。这里更正了代码:
<script type="text/javascript">
$(document).ready(function ()
$('#btnatom').on('click', function ()
$.ajax(
type: 'POST',
url: "/AtomPayment/TransferFund",
data: ,
dataType: "text",
success: function (resultData)
if(resultData == "Ok")
alert("Save Complete");
window.location = "https://google.com/"
);
);
);
</script>
[HttpPost]
public ActionResult TransferFund()
//do some transfer work
return Content("Ok");
【讨论】:
以上是关于无法重定向到 MVC 控制器中的外部 URL的主要内容,如果未能解决你的问题,请参考以下文章
IdentityServer 4,OpenIdConnect 重定向到外部登录 url
使用 web.config 中的 httpRedirect 将 asp.net MVC URL 重定向到特定的控制器/操作/参数