Ядро asp .net не устанавливает cookie-файлы ответов в IE и EDGE, но хорошо работает в Firefox и Chrome - PullRequest
0 голосов
/ 05 июня 2018

У меня есть контроллер входа с действием post, которое перенаправляет на домашнюю страницу после успешного входа.Я использую следующий код для перенаправления, который хорошо работает в Chrome и Firefox.но не перенаправляет в IE и EDGE, и cookie-файл ответа не установлен

private ActionResult RedirectToLocal(string returnUrl)
{
    if (Url.IsLocalUrl(returnUrl))
    {
        return Redirect(returnUrl);
    }
    else
    {
        return RedirectToRoute("default", new { controller = "", action = "" });
    }
}

Действие My Login

public IActionResult Login(string userName, string password)
{
   try
   {
       if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))
                throw new InvalidOperationException("Username/Password can not be empty");

            var session = CreateSession(userName, password);
            var returnUrl = Request.Query["returnUrl"];
            return RedirectToLocal(returnUrl);
    }
    catch (Exception ex)
    {
        ModelState.AddModelError("Login", ex.Message);
    }

        return View();
    }

Я использую свое собственное управление сеансом, для которого я устанавливаю сеансовые куки-файлы, напримерследующий

CookieOptions option = new CookieOptions();
option.Path = AppPath;
option.Domain = AppHost;             
httpContextAccessor.HttpContext.Response.Cookies.Append(AppSessionToken, "SomeSessionId", option);

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

После поисков точного ответа я обнаружил, что Internet Explorer (все версии) не позволяет указывать домен localhost, локальный IP-адрес или имя компьютера.Когда вы это делаете, Internet Explorer просто игнорирует куки.Поэтому я удалил следующую строку

option.Domain = AppHost;

из моих кодов, и все начало работать как положено как в IE, так и в EDGE.

0 голосов
/ 05 июня 2018

Поскольку вы не опубликовали свой маршрут с Startup.cs, я не уверен, почему он не сработал для вас.Может быть, вам не следует переопределять параметр controller и action, передав new { controller = "", action = "" } в метод RedirectToRoute()?

Вместо этого вы пытались просто вызвать метод с именем маршрута, например

return RedirectToRoute("default");

Или вы можете использовать RedirectToAction()

if (Url.IsLocalUrl(returnUrl))
{
    return Redirect(returnUrl);
}

// action, controller and route values
return RedirectToAction("index", "home", new { area = "" });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...