2008-11-30 8 views
3

Est-il possble d'avoir quelque chose comme ça dans ASP.NET MVC ...Comment configurer 2 actions avec le même nom, 1 autorisé et 1 non autorisé?

[Authorize] 
[AcceptVerbs(HttpVerbs.Get)] 
public string AddData(string Issues, string LabelGUID) 
{ 
    return "Authorized"; 
} 

[AcceptVerbs(HttpVerbs.Get)] 
public string AddData() 
{ 
    return "Not Authorized"; 
} 

Donc, si l'utilisateur n'est pas connecté, il est par défaut à l'action non autorisée.

Répondre

3

Oui, il est possible. Vous devez créer votre propre ControllerActionInvoker et remplacer le membre FindActionMethod. Je laisse la classe de base faire son travail et vérifie ensuite si la méthode qu'elle retourne répond à vos critères et si non, retourne une meilleure correspondance.

Je fais quelque chose comme ceci pour permettre à mes contrôleurs d'avoir une "action par défaut" et cela fonctionne bien. Découvrez MvcContrib et leur implémentation de leur ActionInvoker pour un très bel exemple.

1

Je ne crois pas. L'action du contrôleur avec la meilleure correspondance des paramètres sera sélectionnée, puis les attributs seront appliqués.

Vous pouvez utiliser

if (Request.IsAuthenticated) 
{ 
    return "Authorized"; 
} 
else 
{ 
    return "Not Authorized"; 
} 

Sous le capot [Authorize] fait essentiellement la même chose

protected virtual bool AuthorizeCore(IPrincipal user) 
{ 
    if (user == null) 
    { 
     throw new ArgumentNullException("user"); 
    } 

    if (!user.Identity.IsAuthenticated) 
    { 
     return false; 
    } 

    ...snip... 
} 
Questions connexes