我有一个 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);
}
});
简单来说,ajax发送请求时,你得到的数据应该是你约定的json类型。 Redirect不会发回匹配的数据,所以你的代码是错误的,无法实现这个要求。
Ajax用于发送http请求,发送方式和接收格式需要自己定义。在你的场景中,建议接收到text或者json格式的数据后使用window.location进行跳转
使用
<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);
}
从控制器获取谷歌网址。
[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) {
}
});