簡體   English   中英

Asp.net核心Razor頁面-頁面加載后設置變量值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM