【问题标题】:Redirect from APIController action to other MVC controller action从 APIController 操作重定向到其他 MVC 控制器操作
【发布时间】:2016-02-06 12:18:15
【问题描述】:

我创建了一个具有注册操作的 Web api 控制器:

public class MyProjApiController : ApiController
    {
        public IHttpActionResult Register()
        {
            return  RedirectToAction("Register", "AccountController"); //??
        }
    }

我正在尝试重定向到 MVC 控制器 public class AccountController : Controller 中具有 public async Task<ActionResult> Register(RegVM model) 的另一个操作,但我在 MyProjApiController 中的注册操作具有 IHttpActionResult 返回类型并且在 AccountController 中注册具有 Task<ActionResult> 类型 - 如何调用吗?

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

我认为您在这里混合了两个概念。您的 API 控制器应该具有将从某些客户端调用的端点,并且您应该以客户端可以读取的格式(XML 或 JSON)返回一些数据。您不应该重定向到另一个 MVC 控制器。

您应该做的是返回一些数据,这些数据具有客户端可以使用的 MVC 动作控制器的路径。

public HttpResponseMessage Register()
{
   //DO something as you want 
    var newUrl = this.Url.Link("Default", new { Controller = "Account", 
                                                                   Action = "Register" });
    return Request.CreateResponse(HttpStatusCode.OK,
                                              new {Success = true, RedirectUrl = newUrl});
}

这将向调用者返回这样的响应,并带有 200 OK 响应状态代码

{
   "Success" : true,
   "RedirectUrl" : "yoursite.com/Account/Register"    
}

客户应该阅读本文并做必要的事情。例如,如果您从您的 js 代码中调用此 API,您可以简单地使用 window.location.href 将用户重定向到新页面。

例如,

$.post("PathToYourApiEndpoint,function(res){
  if(res.Success)
  {
    window.location.href=res.RedirectUrl;
  }
}); 

再次,我不确定您为什么首先调用 API 并将用户重定向到 MVC 控制器操作。无论您在 Web api 操作方法中执行什么逻辑,您都可以在 MVC 控制器中执行,从而避免您的 API 调用。

【讨论】:

  • 所以,有一些东西进来了(RegisterModelClass as JSON),我验证它,然后用重定向 URL 将另一个 JSON 发送回客户端 - 正确吗?
  • 取决于您从哪里调用它。如果您在让用户进入注册页面之前调用 Web api 端点来验证某些内容,您可能会从您的 js 代码中调用此端点。因此,获取响应,检查值并使用 window.location.href 将用户重定向到新页面。
  • 我会尝试通过安卓设备调用它
  • @curiousity 那你为什么要重定向到 MVC 控制器。你的注册应该是一个 API 端点
【解决方案2】:

如果您指的是 API 帮助文件。我想禁用本地除外。

if (!Request.IsLocal)
{
  Response.Redirect("/home");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多