Как RedirectToAction, используя строку - PullRequest
0 голосов
/ 07 января 2019

Я новичок в MVC, поэтому буду признателен за любую помощь по следующим вопросам.

У меня есть AuthController для входа в систему, и если есть returnUrl, я бы хотел вернуться к этому URL. Кажется, он ищет в текущем контроллере (Auth) returnUrl (/ App / Trips), но если я укажу контроллер, он будет работать нормально.

Есть идеи, почему RedirectToAction (returnUrl) не работает, а RedirectToAction ("Trips", "App") работает?

Интересно, это как-то связано с картированием? Вот что у меня есть:

Отображение в Startup.cs

config.MapRoute(
    name: "Default",
    template: "{controller}/{action}/{id?}",
    defaults: new { controller = "App", action = "Index" }
);  

AuthController.cs

[HttpPost]
public async Task<ActionResult> Login(LoginViewModel vm, string returnUrl)
{
    if(ModelState.IsValid)
    {
        var signInResult = await _signInManager.PasswordSignInAsync(vm.Username, vm.Password, true, false);

        if (signInResult.Succeeded)
        {
            if(string.IsNullOrWhiteSpace(returnUrl))
            {
                return RedirectToAction("Trips", "App");
            }
            else
            {
                //return RedirectToAction(returnUrl);       // Doesn't work - tries to find /App/trips under /Auth 
                return RedirectToAction("Trips", "App");    // Works! goes straight to /App/trips

            }
        }
        else
        {
            ModelState.AddModelError("", "Username or Password is incorrect");
        }
    }

    return View();
}

значение returnUrl, когда оно выше run = "/ App / trips"

ПРОЙДИТЕ, когда

return RedirectToAction("Trips", "App");

Идет к http://localhost:12345/App/Trips, как и ожидалось

FAIL когда

return RedirectToAction(returnUrl);

Страница не найдена http://localhost:12345/Auth/%2FApp%2Ftrips

1 Ответ

0 голосов
/ 07 января 2019

В RedirectToAction нам нужно передать имя контроллера и имя действия в качестве параметра в то время как Redirect() требует только URL

Все, что вам нужно, это выполнить

   return Redirect(returnUrl);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...