2016-03-17 2 views
0

Я использую ASP.NET Сердечник RC1 и у меня есть действие API который вызывается клиентом с помощью Угловая:Перенаправление от действия к действию API MVC

[HttpPost("account/signin")] 
public async Task<IActionResult> SignIn([FromBody]SignInModel model) { 

    if (ModelState.IsValid) { 

    // Redirect to Home/Index here 

    } else {  

    return HttpBadRequest(); 

    } 

} 

Как перенаправлять от этого действия, вызывается клиентом для действия Home/Index для загрузки этой страницы?

ответ

2

Вам необходимо обработать перенаправление в угловом, а не на сервере. Ваш API-интерфейс должен возвращать признак успеха Angular, а затем в вашем Angular controller, который называется API, вам нужно будет проверить значение ответа и перейти на соответствующую страницу.

Если вы возвращаете ответ от перенаправления 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(); 
    } 
} 

Вот пример подобного обращения код, который вы могли бы хотеть в вашем Angualar контроллера (это предполагает "/" является URL для дома/Index):

$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." 
}); 
+0

Это то, чего я действительно хочу. Спасибо. –