【问题标题】:Redirect from API action to MVC action从 API 操作重定向到 MVC 操作
【发布时间】:2016-03-17 16:35:53
【问题描述】:
我正在使用 ASP.NET Core RC1,并且我有一个 API 操作正在由客户端使用 Angular 调用:
[HttpPost("account/signin")]
public async Task<IActionResult> SignIn([FromBody]SignInModel model) {
if (ModelState.IsValid) {
// Redirect to Home/Index here
} else {
return HttpBadRequest();
}
}
如何从客户端调用的这个动作重定向到 Home/Index 动作以加载该页面?
【问题讨论】:
标签:
asp.net-core
asp.net-core-mvc
【解决方案1】:
您需要在 Angular 中处理重定向,而不是在服务器上。您的登录 API 应该向 Angular 返回成功指示,然后在调用 API 的 Angular 控制器中,您需要检查响应值并转换到相关页面。
如果您从 API 返回重定向响应,Angular 将简单地跟随该重定向,然后将 Home/Index 的内容接收到其 HTTP 请求对象中,这不太可能是您想要的。
API方法:
[HttpPost("account/signin")]
public async Task<IActionResult> SignIn([FromBody]SignInModel model) {
if (ModelState.IsValid) {
return new { Authenticated = true };
} else {
return HttpBadRequest();
}
}
这是您可能希望在 Angular 控制器中处理代码的示例(假设“/”是 Home/Index 的 URL):
$http.post(
"account/signin",
{ "Username": vm.username, "Password": vm.password }
).then(function (authResponse) {
if (authResponse.data.Authenticated) {
// Reload the page:
$window.location.href = "/";
} else {
vm.success = false;
vm.failMessage = "Login unsuccessful, please try again.";
}
}, function (errResponse) {
// Error case.
vm.failMessage = "Unable to process login - please try again."
});