【发布时间】:2015-02-12 09:20:32
【问题描述】:
我创建了一个 MVC 5 项目并使用 Windows 身份验证。 我的问题是,每当操作属性 [Authorize(Roles = "Roelabc")] 拒绝用户的操作时,浏览器都会弹出带有用户名/密码的登录警报。 现在我不想弹出这个,我只想在用户被拒绝时将用户重定向到自定义页面。 非常感谢。
【问题讨论】:
我创建了一个 MVC 5 项目并使用 Windows 身份验证。 我的问题是,每当操作属性 [Authorize(Roles = "Roelabc")] 拒绝用户的操作时,浏览器都会弹出带有用户名/密码的登录警报。 现在我不想弹出这个,我只想在用户被拒绝时将用户重定向到自定义页面。 非常感谢。
【问题讨论】:
创建一个派生自 AuthorizeAttribute 的类,将解决我的问题。
public class WindowsAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result is HttpUnauthorizedResult)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "client", filterContext.RouteData.Values[ "client" ] },
{ "controller", "Home" },
{ "action", "Contact" },
{ "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
});
}
}
}
并像这样使用它
[WindowsAuthorize(Roles = "User1")]
[HttpGet]
public ActionResult Index(string runDate = "")
{ ... }
【讨论】:
您可以创建一个名为 unathorized 的视图。在您的登录类中,只需重定向到该视图。你可以在 logon.cs 中使用类似的东西
if (AuthenticateUser())
{
if (CheckRulesOfBehavior())
{
AuthorizeUser();
HttpContext.Response.Redirect("~/Work/Index");
}
else
{
HttpContext.Response.Redirect("~/Errors/Unauthorized");
}
【讨论】: