Ajax调用不会基于webapi的Redirect 302进行重定向

问题描述 投票:0回答:1

我有一个 C# webapi 应用程序,其中端点仅进行重定向,但是,当我从具有 AJAX 调用的 HTML 页面进行调用时,它不会重定向。我缺少什么?我尝试了所有组合。

 [HttpPost]
        [Route("Redirect")]
        public async Task<IActionResult> Redirect()
        {
            var response = "https://google.com";
            return Redirect(response);
        }

AJAX 调用

$.ajax({
   url: "https://10.10.45.2/api/Redirect", 
   type: "POST",
   dataType: "json",
 contentType: "application/json; charset=utf-8",
 success: function(data, textStatus, xhr) {
        window.location = xhr.location;   // I know this is not correct
    },
    complete: function(xhr, textStatus) {
        console.log("Complete: " + xhr.status);
    }, 
    error: function (jqXHR, timeout, message) {
        console.log("Complete: " + jqXHR.status);
        console.log("Response Location :" + loginPageRedirectHeader);
    }
});
javascript c# jquery ajax asp.net-core-webapi
1个回答
0
投票

简单来说,ajax发送请求时,你得到的数据应该是你约定的json类型。 Redirect不会发回匹配的数据,所以你的代码是错误的,无法实现这个要求。

Ajax用于发送http请求,发送方式和接收格式需要自己定义。在你的场景中,建议接收到text或者json格式的数据后使用window.location进行跳转

适合您的正确方法。

  1. 使用

    <a></a>
    标签导航到新页面。

    <a href="/api/Redirect">Navigate to Google</a>
    
    [HttpPost]
    [Route("Redirect")]
    public async Task<IActionResult> Redirect()
    {
        var response = "https://google.com";
        return Redirect(response);
    }
    
  2. 从控制器获取谷歌网址。

    [HttpPost]
    [Route("Redirect")]
    public string Redirect()
    {
        var response = "https://google.com";
        return response;
    }
    
    $.ajax({
        url: "https://10.10.45.2/api/Redirect", 
        type: "POST",
        dataType: "text",
        success: function(data) {
            window.location = data;
        },
        error: function (jqXHR, timeout, message) {
        }
    });
    
© www.soinside.com 2019 - 2024. All rights reserved.