2016-05-12 19 views
0

Ich verweise den folgenden Link für die Implementierung von Anti-Fälschung in meiner Web-Anwendung.kann kein Anti-Fälschungs-Token in FilterContext finden

link

$.ajaxAntiForgery({ 
    type: "POST",    
    url: "sampleapp", 
    contentType: false, 
    processData: false, 
    cache: false, 
    success: function (result) {  } 
}); 

Das Token in dem Dokument, wie beschrieben angelegt wird, aber in dem Code-Behind wirft es Fehler in der folgenden Zeile.

public abstract class BaseController : Controller 
{ 
    private readonly ValidateAntiForgeryTokenAttribute _validator; 
    private readonly AcceptVerbsAttribute _verbs; 
    protected BaseController (HttpVerbs verbs) 
    { 
     this._verbs = new AcceptVerbsAttribute(verbs); 
     this._validator = new ValidateAntiForgeryTokenAttribute();    
    } 

    protected override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     base.OnAuthorization(filterContext); 

     string httpMethodOverride = filterContext.HttpContext.Request.GetHttpMethodOverride(); 
     if (this._verbs.Verbs.Contains(httpMethodOverride, StringComparer.OrdinalIgnoreCase)) 
     { 
      this._validator.OnAuthorization(filterContext); 
     } 
    } 
} 

Antwort

0

Versuchen Sie es stattdessen.

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)] 
public class ValidateTokenAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public string VariableTokenKey = "__RequestVerificationToken"; 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     try 
     { 
      if (filterContext.HttpContext.Request.IsAjaxRequest()) { this.ValidateRequestHeader(filterContext.HttpContext.Request); } 
      else { AntiForgery.Validate(); } 
     } 
     catch 
     { 
      InvalidRequest(filterContext, "103", "", "Token not found."); 
     } 
    } 
    private void ValidateRequestHeader(HttpRequestBase request) 
    { 
     string cookieToken = string.Empty; 
     string formToken = string.Empty; 
     string tokenValue = request.Headers[this.VariableTokenKey]; // read the header key and validate the tokens. 
     if (!string.IsNullOrEmpty(tokenValue)) 
     { 
      var antiForgeryCookie = request.Cookies[AntiForgeryConfig.CookieName]; 
      cookieToken = antiForgeryCookie != null ? antiForgeryCookie.Value : null; 
     } 
     AntiForgery.Validate(cookieToken, tokenValue); // this validates the request token. 
    } 
    private void InvalidRequest(AuthorizationContext filterContext, string errorCode, string sMessage, string eMessage) 
    { 
     if (filterContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      filterContext.Result = new JsonResult 
      { 
       Data = new { ErrorCode = errorCode, Message = eMessage }, 
       JsonRequestBehavior = JsonRequestBehavior.AllowGet 
      }; 
     } 
     else 
     { 
      ViewDataDictionary viewData = new ViewDataDictionary(); 
      viewData.Add("ShortMessage", "Access denied."); 
      viewData.Add("Message", "Anti forgery token not found."); 
      filterContext.Result = new ViewResult { MasterName = "", ViewName = "Error", ViewData = viewData }; 
     } 
    } 
} 
+0

Können Sie mir helfen zu verstehen, was mit dem von mir geposteten Code nicht stimmt? –

+2

@Ammu - Der Code, den Sie gepostet haben, ist nicht genug für die Referenz zu sagen, was schief gelaufen ist. Wenn Sie mir die ganze Klasse mitteilen könnten, dann könnte ich Ihnen vorschlagen, an welchem ​​Teil Sie kompromittiert wurden. Ich war in der Lage, basierend auf Ihrem Empfehlungslink erfolgreich zu bauen und zu laufen. –

+0

Ich habe den ganzen Code aktualisiert. Bitte lassen Sie mich wissen, wenn es etwas ändern muss. –