如何使用某些型号从api方法重定向到某些View? 这与标准控制器一样:
return RedirectToAction("View",model).
我可以在ApiController方法中制作这样的东西吗?
答案 0 :(得分:0)
您通常使用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操作。