2014-10-30 9 views
5
[AuthenticateUser] 
public class HomeController : Controller 
{ 
    // 
    // GET: /Home/ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [AllowAnonymous] 
    public ActionResult List() 
    { 
     return View(); 
    } 
} 

Come rimuovere l'autenticazione per l'azione denominata come Elenco? Si prega di avvisare ....È possibile disabilitare il filtro di autenticazione su un'azione in un controller MVC 5?

La mia codifica del filtro personalizzato come segue .. ho ereditato anche la chiamata FilterAttribute. raccomanda prego quanto riguarda

public class AuthenticateUserAttribute: FilterAttribute, IAuthenticationFilter 
{ 
    public void OnAuthentication(AuthenticationContext context) 
    { 
     if (this.IsAnonymousAction(context)) 
     { 

     } 

     if (user == "user") 
     { 
      // do nothing 
     } 
     else 
     { 
      context.Result = new HttpUnauthorizedResult(); // mark unauthorized 
     } 
    } 

    public void OnAuthenticationChallenge(AuthenticationChallengeContext context) 
    { 
     if (context.Result == null || context.Result is HttpUnauthorizedResult) 
     { 
      context.Result = new RedirectToRouteResult("Default", 
       new System.Web.Routing.RouteValueDictionary{ 
        {"controller", "Home"}, 
        {"action", "List"}, 
        {"returnUrl", context.HttpContext.Request.RawUrl} 
       }); 
     } 
    } 
} 

Il codice sotto generano il messaggio di errore: Errore 1 Il metodo match migliore overload per 'MVC5Features.Filters.AuthenticateUserAttribute.IsAnonymousAction (System.Web.Mvc.AuthorizationContext)' ha alcuni argomenti non validi c : \ users \ kirupananthan.g \ documents \ visual studio 2013 \ Projects \ MVC5Features \ MVC5Features \ Filters \ AuthenticateUserAttribute.cs 16 17 MVC5Features Errore 2 Argomento 1: impossibile convertire da 'System.Web.Mvc.Filters.AuthenticationContext' a ' System.Web.Mvc.AuthorizationContext 'c: \ users \ kirupananthan.g \ documents \ visual studio 2013 \ Projects \ MVC5Features \ MVC5Features \ Filters \ AuthenticateUserAttribute.cs 16 40 MVC5Features

if (this.IsAnonymousAction(context)) 
+0

È il tuo attributo personalizzato. In caso contrario, forse '[AllowyAnonymous]' funzionerà. –

+0

Filtro di autenticazione introdotto in MVC 5 .. Non esiste un filtro di autenticazione incorporato .. Questo è il mio filtro di autenticazione personalizzato ... –

+0

dove è impl. di 'IsAnonymousAction'? Cosa c'è di più in se il corpo dovrebbe essere 'return'. –

risposta

9

[AllowAnonymous] 

Dal momento che è il vostro filtro personalizzato, è possibile estenderla a gestire AllowAnonymous (se non si desidera utilizzare AllowAnonymous, su base annua può creare proprio f.e. NoAuthentication):

public class AuthenticateUser : IAuthenticationFilter 
{ 

    public void OnAuthentication(AuthenticationContext filterContext) 
    { 
     if (this.IsAnonymousAction(filterContext)) 
     { 
      return; 
     } 

     // some code 
    } 

    private bool IsAnonymousAction(AuthenticationContext filterContext) 
    { 
     return filterContext.ActionDescriptor 
          .GetCustomAttributes(inherit: true) 
          .OfType<AllowAnonymousAttribute>() 
              //or any attr. you want 
          .Any(); 
    } 
} 
+0

ho provato il tuo esempio .. ma mostra l'errore di cui sopra ... sono stato incluso l'errore in modifica la mia domanda ... Si prega di avvisare –

+0

Vedere il mio commento in questione. –

+0

la tua risposta è corretta. Ho copiato la tua funzione e l'ho incollata sul mio codice. Quindi, hai modificato la tua risposta "AuthorizationContext" in "" AuthenticationContext "in quel parametro.Si prega di avvisare –

1

Prova l'attributo

+1

[AllowAnonymous] non funziona per il filtro di autenticazione disabilita ... È per il filtro di autorizzazione –

0

Forse se si specifica per l'azione e nel filtro di autenticazione personalizzato permettere che questo gruppo per tutto ciò che un determinato gruppo di utenti.

0

In MVC 5 e cito da http://www.dotnetcurry.com/showarticle.aspx?ID=975 Il CustomOverrideAuthorizationAttribute classe viene ereditata dalla classe FilterAttribute e implementa IOverrideFilter. Questa interfaccia viene utilizzata per definire i filtri applicati sul controller. La proprietà FiltersToOverride restituisce il tipo IAuthorizationFilter. Ciò significa che il filtro Autorizza applicato al genitore (controller o classe di applicazione globale) verrà sovrascritto.

0

Credo che dovresti rimuovere l'attributo dal controller e metterlo su ciascun metodo di azione tranne List.

Problemi correlati