MVC 3 AuthorizeAttribute Перенаправление с помощью пользовательского сообщения
Как создать пользовательский атрибут AuthorizeAttribute, который указывает сообщение в форме строкового параметра, а затем передает его на страницу входа?
Например, в идеале было бы здорово это сделать:
[Authorize(Message = "Access to the blah blah function requires login. Please login or create an account")]
public ActionResult SomeAction()
{
return View();
}
Затем в действии Login я мог бы сделать что-то вроде этого:
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>
В основном я хочу передать пользовательское сообщение на страницу входа, чтобы я мог отображать сообщение, специфичное для того, к которому пользователь пытается получить доступ в это конкретное время.
Ответы
Ответ 1
Вы можете попробовать что-то вроде этого:
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();
}
Ответ 2
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" )