Usuário com melhor resposta
Return RedirectToAction em async task<ActionResult>

Pergunta
-
Como faço o redirecionamento para outra action que tb é async task, pesquisei e o que encontrei como resposta é assim mais não funciona.
return await Task.Run<ActionResult>(() => { return RedirectToAction("Index", "Departamento"); });
Junior
Respostas
-
Então é por isto, por ser invocado via javascript/ajax, o navegador não faz o redirecionamento. O que pode ser feito é retornar um JSON (ou um texto simples), por exemplo, daí no success do $.ajax (supondo que esteja usando jQuery) você verifica se o retorno é a mensagem esperada (tipo "OK") e faz o redirecionamento via JavaScript.
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
- Marcado como Resposta Junior_luiz quinta-feira, 30 de março de 2017 16:36
Todas as Respostas
-
Junior,
Sua action atual (que faz o redirecionamento) tem alguma outro recurso que necessite de processamento assíncrono (tipo consulta a banco de dados, request http, etc)? Caso não, você pode mudar sua action para síncrona pois não terá diferença no processamento.
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
-
-
Perfeito, mas só pra clarificar minha resposta, se sua autenticação não utilizar métodos assíncronos, sua action assíncrona não terá diferença.
Enfim, altere para apenas return RedirectToAction("Index", "Departamento"), sem o return await Task.Run.
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
-
Juliano minha autenticação é customizada e portanto é assincrona, inicialmente havia feito apenas o redirecttoaction(Index","Departamento") e não funcionou, por isso fui procurar a solução e o que achei foi o que postei acima e que tb não funciona.
Junior
-
Dá alguma mensagem de erro ou não redireciona?
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
-
-
Alguns itens a serem verificados (por não estar vendo o código):
- Sua action que chama o redirecionamento foi invocada como? Via ajax?
- Action ou Controller de destino requer autenticação (atributo Authorize) e o usuário é redirecionado de volta para a action do login
- Sua action está em uma controller do MVC ou Web API?
- Erro de digitação no nome da action ou controller
Enfim, sem o código fica meio complicado. Se puder compartilhar ajudaria.
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
-
Realmente é invocada via ajax ai está
public async Task<ActionResult> GetLogin(CLIENTE cliente) { try { string cnpj = cliente.cli_cnpj; string senha = cliente.cli_senha; cnpj = cnpj.Replace(".", "").Replace("/", "").Replace("-", ""); var client = new ClientApi(); var jSon = "{cli_cnpj:'" + cnpj + "',cli_senha:'" + senha + "'}"; var uri = "cliente/logar"; var result = await client.PostRequest(uri, jSon); if (result.IsSuccessStatusCode) { var data = await result.Content.ReadAsStringAsync(); JObject json = JObject.Parse(data); Session["usuarioLogadoID"] = json.GetValue("cli_id").ToString(); Session["nomeUsuarioLogado"] = json.GetValue("cli_nome").ToString(); string tese = Session["usuarioLogadoID"].ToString(); string teste2 = Session["nomeUsuarioLogado"].ToString(); } else { ViewBag.Message("Erro no login"); } return RedirectToAction("Index", "Departamento"); //return await Task.Run<ActionResult>(() => //{ // return RedirectToAction("Index", "Departamento"); //}); } catch (Exception ex) { Console.WriteLine(ex); throw; } }
Junior
-
Então é por isto, por ser invocado via javascript/ajax, o navegador não faz o redirecionamento. O que pode ser feito é retornar um JSON (ou um texto simples), por exemplo, daí no success do $.ajax (supondo que esteja usando jQuery) você verifica se o retorno é a mensagem esperada (tipo "OK") e faz o redirecionamento via JavaScript.
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
- Marcado como Resposta Junior_luiz quinta-feira, 30 de março de 2017 16:36
-
Junior,
Interessante.
Eu não tenho nenhum tipo de chamada assim, mas vi que dá pra fazer com AJAX:
<script> $(function() { $.ajax( { url: "/api/request", }).done(function(responseUrl) { window.location.href = responseUrl; }); }); </script>
Antero Marques
_______________________________________________________________________________
Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta. O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.- Sugerido como Resposta Antero Marques quinta-feira, 30 de março de 2017 14:34
- Não Sugerido como Resposta Antero Marques quinta-feira, 30 de março de 2017 14:34
- Editado Antero Marques quinta-feira, 30 de março de 2017 14:35