2015-11-05 100 views
0

我创造出了一个注册动作的web API控制器:重定向从APIController行动,其他MVC控制器动作

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

,我试图以重定向到MVC控制器public class AccountController : Controllerpublic async Task<ActionResult> Register(RegVM model)但我注册另一个动作动作MyProjApiController已有IHttpActionResult返回类型并在AccountController中注册有Task<ActionResult>类型 - 如何调用它?

+0

http://stackoverflow.com/questions/11324711/redirect-from-asp-net-web-api-post-action –

回答

4

我想你在这里混合了两个概念。您的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调用。

+0

所以,一些事情发布后(RegisterModelClass为JSON),我验证它,并发回给客户端另一个带重定向URL的JSON - 正确? – curiousity

+0

取决于你从哪里调用它。如果您在让用户访问注册页面之前调用Web api端点来验证某些内容,您可能会从您的js代码中调用此端点。因此得到响应,检查值并使用'window.location.href'将用户重定向到新页面。 – Shyju

+0

我会尝试通过Android设备调用它 – curiousity

相关问题