从APIController操作重定向到其他MVC控制器操作

本文关键字:操作 MVC 控制器 其他 重定向 APIController | 更新日期: 2023-09-27 18:20:37

我创建了一个具有注册操作的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中的Register操作具有IHttpActionResult返回类型,而在AccountController中的Register具有Task<ActionResult>类型-如何调用它?

从APIController操作重定向到其他MVC控制器操作

我认为您在这里混合了两个概念。您的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控制器操作。无论您在WebAPI操作方法中执行什么逻辑,都可以在MVC控制器中执行,从而避免api调用。

如果您的意思是从API帮助文件。我想禁用本地以外的功能。

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