您好我正在使用自定义角色提供程序,并且所有内容似乎都正常工作,如果用户具有允许权限,则会将其重定向到登录页面。
但我想知道的是,当他们被重定向到登录页面时,登录页面中是否有一种方法可以设置一条消息,说明访问被拒绝或者其他什么。 所以例如我想要像下面这样的东西,User.FailedCustomRole?我不确定某个地方是否存在这样的东西:
[AllowAnonymous]
public ActionResult Login()
{
if (User.FailedCustomRole) {
ViewBag.Message = "No access to this page";
}
return View();
}
由于
答案 0 :(得分:2)
一种方法是更改web.config以将用户重定向到参数为1的登录页面。
更改您的登录操作以获取可为空的int,如果设置,则添加模型状态错误
public ActionResult LogOn(int? id)
{
//int id = Request.QueryString[;
if (id != null)
{
LogOnModel model = new LogOnModel();
ModelState.AddModelError("", "Please Login to use this page");
return View(model);
}
第二种方法是创建一个动作过滤器,用于检查登录和重定向设置Viewbag.LoginError
public class CheckLoginFilterAttribute : ActionFilterAttribute
{
public override void onactionexecuting(ActionExecutedContext filterContext)
{
if (Membership.GetUser() != null)
{
Viewbag.LoginError = "Please Login to use this page";
filterContext.Result = new RedirectToRouteResult(
new System.Web.Routing.RouteValueDictionary {
{"controller", "Account"}, {"action", "Logon"}
}
{
}
base.OnActionExecuted(filterContext);
}
在您的登录页面添加一个显示@(Viewbag.LoginError)
的div。如果未填充,这将呈现空白。
第三种方法是创建一个自定义授权过滤器,该过滤器重定向并在V @(ViewData [“LoginError”]中设置错误消息。
在您的登录页面添加一个显示@(ViewData["LoginError"]
的div。如果未填充,这将呈现空白。
注意我对最后一种方法最不确定或不太满意。