2016-05-15 1 views
0

Existe-t-il un moyen de restreindre l'accès d'une action de contrôleur à une vue spécifique? J'ai une page Détails pour une entité interrogée dans ma base de données et essentiellement par un bouton et une simple invite de confirmation JS Je voudrais changer quelques propriétés de cet objet et le sauvegarder dans la base de données. J'ai développé une méthode d'action de contrôleur qui fait le travail mais je n'ai aucune idée de la façon de restreindre l'accès, donc les utilisateurs ne peuvent pas (intentionnellement) modifier les entités en passant une URL spécifique dans le navigateur. Je voudrais que l'action soit uniquement accessible sur cette page de détails spécifique, en appuyant sur le bouton désigné. J'ai essayé d'utiliser [ChildActionOnly] mais il est uniquement accessible à partir d'une autre méthode d'action, et non d'une vue.Action du contrôleur ASP.NET MVC limitée à une vue spécifique

Merci pour votre aide.

+0

Vous pouvez utiliser 'Request.UrlReferrer' pour obtenir l'URL de référence (et peut-être retourner une page d'erreur de BadRequest si ce n'est pas correct) –

+0

Merci, c'était une bonne direction pour résoudre le problème. – Dandry

Répondre

0

Grâce au commentaire de Stephen Muecke J'ai réussi à le faire fonctionner.

Le bouton est un simple Action Link qui redirige vers l'action du contrôleur restreint:

public ActionResult ReturnBook(int id) 
    { 
     if (Request.UrlReferrer == null) 
     { 
      return HttpNotFound(); 
     } 

     //code 
    } 

Les contrôles de procédé, en cas de UrlReferrer du tout. L'URL de l'action de saisie dans le navigateur entraîne la nullité du référent. Si l'appel est effectué par ActionLink à partir d'une vue, le UrlReferrer n'est pas nul et, en option, sa propriété Request.UrlReferrer.AbsolutePath peut être vérifiée et comparée à l'adresse URL souhaitée, à partir de laquelle l'invocation peut uniquement être effectuée. Dans mon cas, comme je n'appelle pas cette méthode ailleurs dans mon code, je suis resté avec seulement null/notnull condition.