Web API重定向到使用模型查看

时间:2015-02-04 15:34:34

标签: c# asp.net-mvc redirect asp.net-web-api

如何使用某些型号从api方法重定向到某些View? 这与标准控制器一样:

return RedirectToAction("View",model).

我可以在ApiController方法中制作这样的东西吗?

1 个答案:

答案 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操作。