Authorize 属性的要点是在不允许用户访问时阻止对控制器操作的访问。它根本不执行操作并默认重定向到 LogOn 操作。原始动作未执行的事实意味着视图未呈现。
如果您不想重定向到 LogOn 操作但创建一些将呈现的自定义视图,您可以编写自定义 Authorize 属性并覆盖HandleUnauthorizedRequest方法:
Public Class MyAuthorizeAttribute
Inherits AuthorizeAttribute
Protected Overrides Sub HandleUnauthorizedRequest(filterContext As AuthorizationContext)
Dim result = New ViewResult()
result.ViewName = "Forbidden"
result.ViewBag.ErrorMessage = "oops, you are not allowed"
filterContext.Result = result
End Sub
End Class
然后定义~/Views/Shared/Forbidden.vbhtml
将被渲染的视图:
<h3>@ViewBag.ErrorMessage</h3>
最后用这个自定义属性装饰你的控制器:
<MyAuthorize(Roles:="Administrator")>
Public Class CompanyController