2014-07-07 17 views
6

Tek bir sayfada birçok @Html.AntiForgeryToken() nasıl kullanılır?İki AntiForgeryToken'i kullanmadan tek bir sayfada nasıl kullanabilirsiniz Kullanımdan kaldırılan 'Salt' özelliği

Verdiğimde, uzaktaki ana bilgisayarda çalışmıyor, yalnızca yerel olarak!

Ben @Html.AntiForgeryToken("logoff_forgery") belirteç farklı dizeleri foreach sahtekarlığı kullanmaya çalıştı ama denetleyicisi [ValidateAntiForgeryToken(Salt = "logoff_forgery")] eklerken, ben

'System.Web.Mvc.ValidateAntiForgeryTokenAttribute.Salt' 
    'The 'Salt' property is deprecated. 
    To specify custom data to be embedded within the token, 
    use the static AntiForgeryConfig.AdditionalDataProvider property.' 
    D:\projects\codesan\app\CodeSan\CodeSan\Controllers\AccountController.cs 
    289 35 CodeSan 

kimse statik AntiForgeryConfig.AdditionalDataProvider nasıl kullanılacağını biliyor mu bu şu hatayı olsun? Eğer evet ise lütfen benimle paylaşın.

+0

istediğiniz kadar 'Html.AntiForgeryToken içerebilir()' in bir istediğin gibi görün. Sorun nedir? –

+0

Bunu yapmak, uzak ana bilgisayarda çalışmayacak ... – Bellash

cevap

2

Açıklamada belirtildiği gibi Salt özelliği kullanımdan kaldırılmıştır. İşte

IAntiForgeryAdditionalDataProvider

public class MyAntiForgeryAdditionalDataProvider : IAntiForgeryAdditionalDataProvider 
{ 
    public string GetAdditionalData(HttpContextBase context) 
    { 
     return GenerateTokenAndSaveItToTheDB(); 
    } 

    public bool ValidateAdditionalData(HttpContextBase context, string additionalData) 
    { 
     Guid token = Guid.TryParse(additionalData, out token) ? token : Guid.Empty; 
     if (token == Guid.Empty) return false; 

     return GetIfTokenIsFoundInTheDBAndNotExpired(token); 
    } 

    private string GenerateTokenAndSaveItToTheDB() 
    { 
     var newToken = Guid.NewGuid().ToString(); 
     //save it to the db 
     return newToken; 
    } 
} 

için basit bir uygulamasıdır Ve eğer sadece Global.asax.cs bunu kayıt

protected void Application_Start() 
{ 
    AntiForgeryConfig.AdditionalDataProvider = new MyAntiForgeryAdditionalDataProvider(); 
} 
+0

Teşekkür ederim ama 18 saat sonra deneyeceğim ... – Bellash

+0

Ve bunu nasıl kullanırım? Html.AntiForgeryToken() 'veya' Html.MyAntiForgery() '? ve her sayfa için veri tabanındaki jetonu kaydedeceğim anlamına mı geliyor? Bu çözüm ne kadar ağır! – Bellash

+1

Görünümünüzde, 'Html.AntiForgeryToken() 'işlevini kullanırsınız ve çıktı her üretildiğinde, onu belirtecine koymak için' GetAdditionalData() 'yi çağırır. Bu sadece bir örnekti. Db'yi kullanmak zorunda değilsiniz, statik kodlanmış bir guid değeri veya 'Request 'den bir şey olabilir. Sana başlaman için sana bir örnek verdim. –