[英]Asp.net core Razor Page - Setting variable value after page loads
我的索引頁面模型中有一個名為“ 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。
在Index PageModel中,我具有OnGet和OnPostSignIn方法,並且嘗試使用以下兩種方法來設置cookie變量:
cookie = GetXsrfToken();
但是,OnGet方法被調用為時過早,將其放入OnPost方法中意味着它將被調用為時過晚。
因此,一旦頁面完全加載,就需要設置它,但是我不確定如何實現這一點。 任何意見,將不勝感激。
ASP.NET Core將在每個帶有加密值的表單的末尾注入一個名為__RequestVerificationToken的隱藏表單域,並將相同的值傳遞給隨表單請求發送的cookie:
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8NrAkS ... s2-m9Yw">
參考: https : //docs.microsoft.com/zh-cn/aspnet/core/security/anti-request-forgery?view=aspnetcore-2.1
然后,您可以使用Jquery獲取防偽令牌並動態更改按鈕的屬性:
@section Scripts {
<script type="text/javascript">
$(function () {
var csrf = $('input[name="__RequestVerificationToken"]').val();
$("#btn_signin").attr("formaction", "~/SignIn/?" + csrf);
//alert(csrf);
})
</script>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.