0

Ich habe von AuthorizeAttribute Klasse abgeleitet und machte meine eigenen CustomAuthorizeCustom [autorisieren] Filter für Ajax JQuery fordert

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      filterContext.HttpContext.Response.StatusCode = 401; 
      filterContext.Result = new JsonResult 
      { 

       Data = new DataSourceResult { Errors = new { error = "NotAuthorized" } } 
       ,JsonRequestBehavior = JsonRequestBehavior.AllowGet 
      }; 
     } 
     else 
     { 
      // this is a standard request, let parent filter to handle it 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
    } 

Es gibt so viele Orte, an denen ich Ajax JQuery Anruf verwende und es sieht nicht praktisch zu überprüfen Antwort in jedem von denen, und tun dann

window.location.href='/Auth/login'; 

ich frage mich nur, können wir umleiten Seite von HandleUnauthorizedRequest Methode anmelden?

Antwort

0

Erstellen Sie einen Basiscontroller, auf dem Sie Ihr benutzerdefiniertes Attribut authorize platzieren. Etwas wie:

[YourAuthorizeAttribute] 
public class BaseAuthorizeController : BaseController 
{ 
    public BaseAuthorizeController() {} 
} 

Die oben wird auf alle Ihre Aktionen angewendet werden, nicht nur die Ajax-Aktionen. Sie können das Attribut erweitern, indem Sie es für Aktionen, die die neue Logik nicht benötigen, mit einem Booleschen Wert von false übergeben.

public class ClaimsAuthorizeAttribute : ActionFilterAttribute 
{ 
    private readonly bool authorize = true;public YourAuthorizeAttribute(bool authorize = true) 
    { 
     this.authorize = authorize; 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (!authorize) 
     { 
      return; 
     } 

     // Your custom authentication logic 
    } 
+0

Es kann jetzt kein Basiscontroller hinzugefügt werden, da dies ein massives Refactoring erfordern würde. Gibt es eine andere Lösung? Kann dies nicht von der HandleUnauthorizedRequest-Methode umgeleitet werden? – InTheWorldOfCodingApplications