您通常使用 AJAX 调用 Web API。例如使用 jQuery $.getJSON。
所有的 AJAX 请求都由浏览器的XMLHttpRequest 对象处理。如果此对象接收到redirect 响应,它只会重复对给定 URL 的 AJAX 调用。这是透明地发生的,即XHR 对象不会以任何方式通知它已完成重定向,因此您无法以任何方式检测到它。
所以,简短的回答是,您不能通过 AJAX 调用在浏览器中引发重定向:无论是 Web API、MVC 还是传统的 Web 表单,问题始终是 XHR 隐藏了重定向响应,它只是在内部使用它。
长答案是您可以向客户端发送特殊响应,例如可以在 JavaScript AJAX 客户端中识别的对象,并使用传统的 window.location.href=*newUrl* 强制在客户端进行重定向。
例如,您可以实现这样的 Web API 方法
public object GetRedirection()
{
return new {
redirect = true,
newUrl = 'http://www.stackoverflow.com'
};
}
然后调用它并检查结果,例如这样:
$.getJSON('http://..../MyControler').done(function(result) {
if (result.redirect) {
window.location.href = result.newUrl;
}
})
这是通过 AJAX 客户端强制重定向的唯一方法,即间接。
注意:当然,如果您在浏览器地址栏中键入 Web API 的 URL,并且调用的操作返回重定向响应,它将重定向浏览器。但我确实假设您正在使用带有 AJAX 的 Web API。您还可以做一件奇怪的事情:使用相同的 window.location.href 代码来调用返回重定向的 Web API 操作。