c# - 从 APIController 操作重定向到其他 MVC Controller 操作

原文 标签 c# asp.net-mvc

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

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

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

最佳答案

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

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

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 Controller 操作。无论您在 Web api 操作方法中执行什么逻辑,您都可以在您的 MVC Controller 中执行,从而避免您的 API 调用。

关于c# - 从 APIController 操作重定向到其他 MVC Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33548370/

相关文章:

c# - Google Protocol Buffer - 从 C# 客户端向 Java 服务器发送消息

c# - 扩展 Entity Framework 的工作单元

asp.net-mvc - ASPX 中的重复方法 'ProcessRequest'

asp.net-mvc - 不显眼的 MVC3 验证复选框组

c# - 我的部分 View 中的 Jquery 或 Javascript 问题

asp.net-mvc - 在 MVC5 中的 Owin Identity 中重用 regenerateIdentityCallback 中的声明

c# - 正则表达式过滤非数字字符

c# - 使用C#计算PDF文档中的减号数量

c# - double 单元测试类

c# - 以编程方式将 10 个用户登录到远程桌面 session