MVC 3 AuthorizeAtsortingbute Redirect avec message personnalisé

Comment créer un AuthorizeAtsortingbute personnalisé qui spécifie un message sous la forme d’un paramètre de chaîne, puis le transmet à la page de connexion?

Par exemple, idéalement, ce serait cool de faire ceci:

[Authorize(Message = "Access to the blah blah function requires login. Please login or create an account")] public ActionResult SomeAction() { return View(); } 

Ensuite, dans l’action de connexion, je pourrais faire quelque chose comme ceci:

 public ActionResult Login(ssortingng message = "") { ViewData.Message = message; return View(); } 

Et enfin, dans la vue, je peux le faire:

 @if (!Ssortingng.IsNullOrEmpty(ViewData.Message)) { 
@ViewData.Message
}
blah blah

En gros, je souhaite transmettre un message personnalisé à la page de connexion afin d’afficher un message spécifique à ce à quoi l’utilisateur tente d’accéder à ce moment précis.

Vous pouvez essayer quelque chose comme ça:

 public class CustomAuthorizeAtsortingbute : AuthorizeAtsortingbute { public ssortingng Message { get; set; } public override void OnAuthorization(AuthorizationContext filterContext) { var result = new ViewResult(); result.ViewName = "Login.cshtml"; //this can be a property you don't have to hard code it result.MasterName = "_Layout.cshtml"; //this can also be a property result.ViewBag.Message = this.Message; filterContext.Result = result; } 

Usage:

  [CustomAuthorize(Message = "You are not authorized.")] public ActionResult Index() { return View(); } 

web.config

     

Manette:

 public ActionResult LogOn() { return View(); } public ActionResult LogOnYouHavenotRight() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult LogOn(LogOnModel model, ssortingng returnUrl) { } 

Dans les deux vues:

 Html.BeginForm("LogOn", "Account" )