【发布时间】:2019-04-10 16:22:19
【问题描述】:
我的索引页面模型中有一个名为“cookie”的字符串变量。此 cookie 使用以下方法设置:
private string GetXsrfToken()
{
this.Request.Cookies.TryGetValue("XSRF-TOKEN", out var token);
var xsrfToken = token ?? "TestToken";
return xsrfToken;
}
然后在我的 Razor 页面中,它是这样使用的:
....
<div>
<input type="submit" name="btn_signin" value="Sign In" id="btn_signin" formaction="~/SignIn/?_csrf=@Model.cookie" default />
</div>
....
我遇到的问题是第一次加载页面时,GetXsrfToken() 方法返回“TestToken”。调试后我意识到这是因为在页面加载之前设置了“cookie”,所以页面的 XSRF-TOKEN cookie 还不存在。
在索引页面模型中,我有 OnGet 和 OnPostSignIn 方法,我尝试在这两种方法中设置 cookie 变量:
cookie = GetXsrfToken();
然而 OnGet 方法被调用得太早,将它放在 OnPost 方法中意味着它会被调用得太晚。
所以一旦页面完全加载就需要设置它,但我不确定如何实现它。任何建议将不胜感激。
【问题讨论】:
标签: c# cookies razor asp.net-core csrf