当外部API调用时,Action不会创建cookie

Gol*_*Age 8 c# asp.net-core-mvc asp.net-core

假设我们的代码如下:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

AdvanceTokenCallback从外部API调用操作时,操作中的token变量CreateWorkItem变为a null.但是,在我创建"桥接"操作并移动在那里创建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();
    }
}
Run Code Online (Sandbox Code Playgroud)

知道为什么会发生这种情况,是否有可能避免BridgeRedirect使用额外的重定向进行额外的操作?

Gol*_*Age 4

我发现当我在本地主机上运行应用程序时,代码可以在不同的机器和不同的环境上运行,但不能运行。在创建 Cookie 时将属性设置IsEssential为 true 后,一切正常。来自微软文档:

IsEssential - 指示此 cookie 是否对于应用程序正常运行至关重要。如果为 true,则可能会绕过同意策略检查。默认值为 false。

所以我的解决方案是创建一个像这样的cookie:

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

使用这种方式我不再需要这个额外的东西了BridgeRedirect