通常,我需要像这样的控制器进行身份验证:
Namespace Controllers
<Authorize(Users:="user1")>
Public Class Module1Controller
Inherits ApiController
' GET: api/Module1
Public Function GetValues() As IEnumerable(Of String)
Return New String() {"This", "is", "Module1", System.Web.HttpContext.Current.User.Identity.Name}
End Function
但是,除此以外,我们希望使用相同的方法进行身份验证,除了从本地数据库表(在SSMS中)中拉出的用户列表以及他们可以访问并检查他们的控制器之外,还可以查看他们是否有权访问特定的控制器(在此示例中为Module1)。因此,在创建自定义身份验证属性时,我遵循了两个示例,但无法使其正常工作。这个想法是实现这个类:
Public Class CustomAuthorize
Inherits AuthorizeAttribute
Protected Function AuthorizeCore(ByVal httpContext As HttpContextBase) As Boolean
Dim users As String() = {"user1", "user2"}
If users.Contains(httpContext.User.Identity.Name) Then Return True
Return False
End Function
End Class
实际上是从数据库查询中填充字符串数组,然后在控制器顶部使用<CustomAuthorize>
而不是<Authorize(Users:="user1">
...但是当我运行它时,它永远不会使其进入CustomAuthorize类。任何帮助表示赞赏。
答案 0 :(得分:0)
这就是最终的结果:
Public Class CustomAuthorize
Inherits System.Web.Http.AuthorizeAttribute
Protected Overrides Function IsAuthorized(ByVal actionContext As System.Web.Http.Controllers.HttpActionContext) As Boolean
Dim users As String() = {"user1", "user2"}
If users.Contains(httpContext.User.Identity.Name) Then Return True
Return False
End Function
End Class