我创建了一个具有注册操作的web api控制器:
public class MyProjApiController : ApiController
{
public IHttpActionResult Register()
{
return RedirectToAction("Register", "AccountController"); //??
}
}
我正在尝试重定向到具有public class AccountController : Controller
的MVC控制器public async Task<ActionResult> Register(RegVM model)
中的另一个操作,但MyProjApiController
中的我的注册操作具有IHttpActionResult
返回类型并且在AccountController中注册了Task<ActionResult>
类型 - 如何调用它?
答案 0 :(得分:5)
我认为你在这里混合了两个概念。您的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调用。
答案 1 :(得分:0)
如果您要从API帮助文件中获取信息。我想禁用本地除外。
if (!Request.IsLocal)
{
Response.Redirect("/home");
}