Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
276 views
in Technique[技术] by (71.8m points)

c# - MVC 3 AuthorizeAttribute Redirect with Custom Message

How can I create a custom AuthorizeAttribute that specifies a message in the form of a string parameter and then passes that along to the login page?

For example, ideally it would be cool to do this:

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

Then, in the Login action, I could do something like this:

public ActionResult Login(string message = "")
{
    ViewData.Message = message;

    return View();
}

And finally in the view I can do this:

@if (!String.IsNullOrEmpty(ViewData.Message))
{
    <div class="message">@ViewData.Message</div>
}

<form> blah blah </form>

Basically I want to pass a custom message to the login page so I can display a message specific to what the user is trying to access at that particular time.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can try something like this:

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    public string 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();
    }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...