Anti-forgery token, çoğu zaman otomatik olarak sayfaya yerleşir ve kullanılır, fakat bazen sizin eklemeniz gerekebilir. Bu örnekteki sayfamız, herhangi bir controller action’a ulaşmayacak şekilde planlanmış bir sayfa. Fakat sonradan eklenen bir istek gereği bir controller action’a POST yapması gerekti. Bunun için bu sayfada bir anti-forgery token yaratmamız ve bu token’i yapacağımız POST request’te kullanmamız gerekiyor.

Anti-Forgery Token Yaratma

Anti-forgery token bulundurmasını istediğimiz cshtml dosyasının üst kısmına aşağıdaki satırları ekliyoruz:

@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf
@functions{
    public string GetAntiXsrfRequestToken()
    {
        return Xsrf.GetAndStoreTokens(Context).RequestToken;
    }
}

<input type="hidden" id="RequestVerificationToken"
       name="RequestVerificationToken" value="@GetAntiXsrfRequestToken()">

Bu satırlar, sayfamızda “RequestVerificationToken” id’sine sahip gizli bir input field yaratacak. Sayfadan yapacağımız POST request’in header’larına bu token’i eklememiz gerekecek.

Anti-Forgery Token Kullanma

Aşağıda JavaScript ile POST request’imizi yaptığımız function’ı görebilirsiniz. Template controller, Delete action’ına bir POST request yapıyoruz. URL kısmında bir id gönderiyoruz. POST başarılı olursa sayfayı yeniliyoruz, POST başarısız olursa “Delete failed.” uyarısı gösteriyoruz. İkinci “setRequestHeader” metod çağrısında anti-forgery token’i POST request’e nasıl dahil ettiğimizi görebilirsiniz.

function deleteTemplate(uidOftheItemToBeDeleted) {
    let postUrlFragment = 'id=' + uidOftheItemToBeDeleted;
    let xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function () {
        if (xhttp.readyState === XMLHttpRequest.DONE) {
            if (xhttp.status === 200) {
                location.reload();
            } else {
                alert('Delete failed.');
            }
        }
    };
    xhttp.open('POST', '..\/Template\/Delete', true);
    xhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xhttp.setRequestHeader('RequestVerificationToken', document.getElementById('RequestVerificationToken').value);
    xhttp.send(postUrlFragment);
}

Sevgiler.