如果我没有获得控制器操作的授权,我会收到一个空白页并且没有错误消息?我想显示某种消息,这是我的设置:
class MyAuth : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (!httpContext.User.Identity.IsAuthenticated)
return false;
return MyIsCurrentUserInRoles(Roles.Split(",".ToCharArray()));
}
}
用作
[Myauth(Roles="admin")]
class MyController: Controller
{
}
,当我未获得授权时,结果为空白页?
这是默认行为吗?如果是这样,我在哪里更改它以产生不真实的消息?
答案 0 :(得分:8)
是的,这是在ASP.Net Development Server中运行时的默认行为:
ASP.Net MVC Authorisation action filter
您可以通过编辑web.config将其重定向到页面,以包含错误401的重定向:
<customErrors defaultRedirect="ErrorPage.aspx" mode="On">
<error statusCode="401" redirect="AccessDenied.aspx" />
</customErrors>
答案 1 :(得分:2)
您可以像AuthorizeCore一样覆盖HandleUnauthorized,以便重定向到NoAccess页面。
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary {
{ "controller", "NoAuthPages" },
{ "action", "NoAccess" }
});
}