MVC 3 AuthorizeAttribute Redirect с пользовательским сообщением - PullRequest
15 голосов
/ 07 мая 2011

Как я могу создать собственный AuthorizeAttribute, который указывает сообщение в виде строкового параметра, а затем передает его на страницу входа в систему?

Например, в идеале было бы здорово сделать это:

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

Затем в действии «Вход в систему» ​​я мог сделать что-то вроде этого:

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

    return View();
}

И, наконец, по мнению, я могу сделать это:

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

<form> blah blah </form>

По сути, я хочу передать пользовательское сообщение на страницу входа в систему, чтобы я мог отобразить сообщение, относящееся к тому, что пользователь пытается получить в этот конкретный момент.

Ответы [ 2 ]

23 голосов
/ 07 мая 2011

Вы можете попробовать что-то вроде этого:

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;
    }

Использование:

    [CustomAuthorize(Message = "You are not authorized.")]
    public ActionResult Index()
    {
        return View();
    }
3 голосов
/ 26 августа 2011

web.config

 <authentication mode="Forms">
       <forms name="SqlAuthCookie"
           loginUrl="~/Account/LogOnYouHavenotRight" 
           timeout="2880"     />
 </authentication>

Контроллер:

public ActionResult LogOn()
    {
        return View();
    }

    public ActionResult LogOnYouHavenotRight()
    {
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
    }

В оба Просмотры:

Html.BeginForm("LogOn", "Account" )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...