【问题标题】:Unable to redirect to external URL in MVC controller无法重定向到 MVC 控制器中的外部 URL
【发布时间】: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;
        ....
    }

【问题讨论】:

  • @kgbph 那是怎么重复的?我确实写了同一行代码,但我收到了这个错误。
  • 我可以假设您使用的是 POST(来自 js 的 ajax),而不是 GET,这就是它可能是跨域请求的原因。
  • 这是一个重复的问题。也许接受的答案对您不起作用。我会尽力帮助你的。
  • @Yara TransferFund 是我通过 Jquery ajax 方法调用的 POST 方法。我刚刚发现 return Redirect("https://google.com"); 来自 get 操作方法,但不能从作为 post 方法的内部操作方法工作。我正在尝试从 POST 操作方法发出 GET 请求

标签: c# jquery ajax asp.net-mvc cors


【解决方案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 拒绝您访问其服务器。无论您发出POSTGET 请求,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");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-31
        • 1970-01-01
        • 2010-12-05
        • 2019-04-03
        • 2012-04-02
        • 2013-08-06
        • 2016-02-28
        • 2023-03-22
        相关资源
        最近更新 更多