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
使用额外的重定向进行额外的操作?
我发现当我在本地主机上运行应用程序时,代码可以在不同的机器和不同的环境上运行,但不能运行。在创建 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
。