4 votes

MVC3 Partial View a besoin d'un contrôleur, mais puis-je le rendre non public ?

Est-il possible de créer une vue partielle comportant un contrôleur qui peut être appelé à partir d'une autre vue à l'aide de la fonction

Html.RenderAction(...)

MAIS sans que ce même contrôleur soit accessible via une URL ?

Ainsi, par exemple

public class ArticlesController : Controller
{
    public ActionResult HomeList()
    ...
}

Donne une liste des derniers articles pour le bas de mes pages web.

Je l'appelle donc à partir de

_Layout.cshtml

Cependant, je ne veux pas que quelqu'un vienne à

mysite.com/Articles/HomeList

et voir la même liste pour diverses raisons (sécurité, référencement, etc.)

Remerciements

Editer :

J'ai fini par utiliser ma propre classe d'attributs, grâce à l'aide de Russ :

public class ChildActionOnly404Attribute : FilterAttribute, IAuthorizationFilter
{
    void IAuthorizationFilter.OnAuthorization(AuthorizationContext filterContext)
    {
        if (!filterContext.IsChildAction)
        {
            throw new HttpException(404, "");
        }
    }
}

9voto

Russ Cam Points 58168

Appliquer le ChildActionOnlyAttribute à l'action. Cela signifie qu'il

  1. ne peut être appelé que depuis l'intérieur de l'application et non pas directement par l'intermédiaire de la correspondance des itinéraires.
  2. ne peut être appelé qu'avec les méthodes d'extension Action ou RenderAction HTMLHelper

Je l'ai trouvé utile pour les questions transversales telles que les menus et la navigation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X