【问题标题】:Web API redirect to view with modelWeb API 重定向到带有模型的视图
【发布时间】:2015-04-04 04:52:58
【问题描述】:

如何从 api 方法重定向到具有某些模型的某些视图? 这与标准控制器中的一样:

return RedirectToAction("View",model).

我可以在 ApiController 的方法中做这样的事情吗?

【问题讨论】:

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


【解决方案1】:

您通常使用 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 操作。

【讨论】:

    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2013-12-28
    • 2011-04-30
    相关资源
    最近更新 更多