(给我的第一步ASP.NET和MVC以及我的裸露)
在我的MVC4互联网应用程序上,我使用默认情况下出现的AccountController以及角色等。
所以我有这个控制器,我在其中定义了访问动作的角色,例如下面的例子。
public class SomeController : Controller
{
private SomeDbContext db = new LookbookDbContext();
//
// GET: /Default1/
[Authorize(Roles = "Administrator")]
public ActionResult Index()
{
return View(db.SomeTable.ToList());
}
...
}
我现在想要的是,当用户/匿名者尝试访问此索引操作时,获取我自己制作的自定义错误视图,而不是显示登录表单。
我添加了这个,但它什么也没做。我一直收到登录表单页面。我更改了它,用于测试porpuses,给我默认的401错误页面,但它也不起作用。
public class CustomAuthorize : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
任何帮助都会非常感激。
修改 好的,我缺少的是我的Actions上的[CustomAuthorize]属性。一旦我将其添加到所需的操作中就可以了。
谢谢!
答案 0 :(得分:0)
显然,您需要做的第一件事就是制作自定义视图。
现在,我建议制作一个动作过滤器来处理这个问题:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAuthenticated)
{
filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
}
else
{
filterContext.RequestContext.HttpContext.Response.Redirect("~/shared/error");
}
}
}
答案 1 :(得分:0)
您应该只能从属性重定向到自定义错误视图。
示例强>
public class UnAuthorizedRedirectAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.Redirect("~/error/no-bacon");
}
}
答案 2 :(得分:0)
注意:此答案已添加到问题中。我将其移至此处以符合网站指南。
我所缺少的是我的操作上的[CustomAuthorize]属性。一旦将其添加到所需的操作中,它就会起作用。