Действие не создает куки при его вызове внешним API - PullRequest
0 голосов
/ 29 января 2019

Допустим, у нас есть следующий код:

public class HomeController : Controller
{
    [HttpPost]
    public IActionResult AdvanceTokenCallback(string apiToken)
    {
        Response.Cookies.Append("Token", apiToken, new Microsoft.AspNetCore.Http.CookieOptions()
        {
            Path = "/",
            Expires = _tokenCookieExpirationTime
        });
        return RedirectToAction(nameof(CreateWorkItem));
    }

    [HttpGet]
    public IActionResult CreateWorkItem()
    {
        string token = Request.Cookies["Token"];
        return View();
    }
}

Когда из внешнего API вызывается действие AdvanceTokenCallback, переменная token в действии CreateWorkItem становится null.Однако в случае, когда я создаю действие «bridge» и перемещаю логику, которая создает там cookie, тогда token, расположенный в CreateWorkItem, содержит значение, которое я ожидал.

public class HomeController : Controller
{
    [HttpPost]
    public IActionResult AdvanceTokenCallback(string apiToken)
    {
        return RedirectToAction(nameof(BridgeRedirect), new { apiToken });
    }

    [HttpGet]
    public IActionResult BridgeRedirect(string apiToken)
    {
        Response.Cookies.Append("Token", apiToken, new Microsoft.AspNetCore.Http.CookieOptions()
        {
            Path = "/",
            Expires = _tokenCookieExpirationTime
        });
        return RedirectToAction(nameof(CreateWorkItem));
    }

    [HttpGet]
    public IActionResult CreateWorkItem()
    {
        string token = Request.Cookies["Token"];
        return View();
    }
}

AnyИдея, почему это происходит, и есть ли возможность избежать этого дополнительного действия BridgeRedirect с дополнительным перенаправлением?

1 Ответ

0 голосов
/ 08 февраля 2019

Я обнаружил, что код работает, а не на разных машинах и в разных средах, когда я запускаю приложение на локальном хосте.После того как я установил атрибут IsEssential в true при создании Cookie, все работает нормально.Из документации Microsoft:

IsEssential - указывает, необходим ли этот файл cookie для правильной работы приложения.Если это правда, то проверки политики согласия могут быть обойдены.Значением по умолчанию является false.

Так что решение в моем случае - просто создать файл cookie следующим образом:

Response.Cookies.Append("Token", apiToken, new Microsoft.AspNetCore.Http.CookieOptions()
{
    IsEssential = true,
    Expires = _tokenCookieExpirationTime
});

Используя этот способ, мне не нужны дополнительныеBridgeRedirect больше.

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