Asp.net mvc VB ASP.NET MVC自定义成员资格提供程序

Asp.net mvc VB ASP.NET MVC自定义成员资格提供程序,asp.net-mvc,vb.net,asp.net-mvc-3,asp.net-membership,Asp.net Mvc,Vb.net,Asp.net Mvc 3,Asp.net Membership,我找到的所有示例都是C语言的,如果是VB,我需要一个。如何将下面的代码转换为继承所有成员资格提供程序函数 Imports System.Data.Entity Imports MyBlog Namespace MyBlog Public Class EmployeeController Inherits System.Web.Mvc.Controller Private db As EmployeeDbContext = New EmployeeDb

我找到的所有示例都是C语言的,如果是VB,我需要一个。如何将下面的代码转换为继承所有成员资格提供程序函数

Imports System.Data.Entity
Imports MyBlog

Namespace MyBlog

    Public Class EmployeeController
        Inherits System.Web.Mvc.Controller

        Private db As EmployeeDbContext = New EmployeeDbContext

        '
        ' GET: /Employee/LogOn

        Public Function LogOn() As ActionResult
            Return View()
        End Function

    End Class

End Namespace

这是我读过的文章。在VB中,我似乎不能继承多个类(不要经常使用继承、实现或接口)。

我得到了一个更简单的解决方案。使用nuget安装
griffin.mvccontrib
。然后创建一个新类,如下所示:

public class MyAccountRepository implements IAccountRepository
end class
按界面上的
CTRL+。
导入正确的命名空间。按下类名上的
CTRL+。
,以获取所有方法及其描述

然后只需使用
EmployeeDBContext
实现它们

通过这样做,您可以保持其他一切不变(使用标准的internet MVC模板)


说明:

我得到了一个更简单的解决方案。使用nuget安装
griffin.mvccontrib
。然后创建一个新类,如下所示:

public class MyAccountRepository implements IAccountRepository
end class
按界面上的
CTRL+。
导入正确的命名空间。按下类名上的
CTRL+。
,以获取所有方法及其描述

然后只需使用
EmployeeDBContext
实现它们

通过这样做,您可以保持其他一切不变(使用标准的internet MVC模板)


说明:

您需要编写一个继承并重写您感兴趣的方法的类:

Public Class MyCustomMembershipProvider
    Inherits System.Web.Security.MembershipProvider

    Public Overrides Property ApplicationName As String
        Get

        End Get
        Set(value As String)

        End Set
    End Property

    Public Overrides Function ChangePassword(username As String, oldPassword As String, newPassword As String) As Boolean

    End Function

    Public Overrides Function ChangePasswordQuestionAndAnswer(username As String, password As String, newPasswordQuestion As String, newPasswordAnswer As String) As Boolean

    End Function

    Public Overrides Function CreateUser(username As String, password As String, email As String, passwordQuestion As String, passwordAnswer As String, isApproved As Boolean, providerUserKey As Object, ByRef status As System.Web.Security.MembershipCreateStatus) As System.Web.Security.MembershipUser

    End Function

    Public Overrides Function DeleteUser(username As String, deleteAllRelatedData As Boolean) As Boolean

    End Function

    Public Overrides ReadOnly Property EnablePasswordReset As Boolean
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property EnablePasswordRetrieval As Boolean
        Get

        End Get
    End Property

    Public Overrides Function FindUsersByEmail(emailToMatch As String, pageIndex As Integer, pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection

    End Function

    Public Overrides Function FindUsersByName(usernameToMatch As String, pageIndex As Integer, pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection

    End Function

    Public Overrides Function GetAllUsers(pageIndex As Integer, pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection

    End Function

    Public Overrides Function GetNumberOfUsersOnline() As Integer

    End Function

    Public Overrides Function GetPassword(username As String, answer As String) As String

    End Function

    Public Overloads Overrides Function GetUser(providerUserKey As Object, userIsOnline As Boolean) As System.Web.Security.MembershipUser

    End Function

    Public Overloads Overrides Function GetUser(username As String, userIsOnline As Boolean) As System.Web.Security.MembershipUser

    End Function

    Public Overrides Function GetUserNameByEmail(email As String) As String

    End Function

    Public Overrides ReadOnly Property MaxInvalidPasswordAttempts As Integer
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property MinRequiredNonAlphanumericCharacters As Integer
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property MinRequiredPasswordLength As Integer
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property PasswordAttemptWindow As Integer
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property PasswordFormat As System.Web.Security.MembershipPasswordFormat
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property PasswordStrengthRegularExpression As String
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property RequiresQuestionAndAnswer As Boolean
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property RequiresUniqueEmail As Boolean
        Get

        End Get
    End Property

    Public Overrides Function ResetPassword(username As String, answer As String) As String

    End Function

    Public Overrides Function UnlockUser(userName As String) As Boolean

    End Function

    Public Overrides Sub UpdateUser(user As System.Web.Security.MembershipUser)

    End Sub

    Public Overrides Function ValidateUser(username As String, password As String) As Boolean

    End Function
End Class
然后在web.config中注册自定义提供程序:

<membership defaultProvider="MyMembership">
    <providers>
        <clear />
        <add 
            name="MyMembership" 
            type="MvcApplication1.MyCustomMembershipProvider, MvcApplication1" enablePasswordRetrieval="false" 
        />
    </providers>
</membership>

所有对
成员身份的调用现在都将使用您在web.config中注册的自定义成员身份提供程序。

您需要编写一个类,该类继承并覆盖您感兴趣的方法:

Public Class MyCustomMembershipProvider
    Inherits System.Web.Security.MembershipProvider

    Public Overrides Property ApplicationName As String
        Get

        End Get
        Set(value As String)

        End Set
    End Property

    Public Overrides Function ChangePassword(username As String, oldPassword As String, newPassword As String) As Boolean

    End Function

    Public Overrides Function ChangePasswordQuestionAndAnswer(username As String, password As String, newPasswordQuestion As String, newPasswordAnswer As String) As Boolean

    End Function

    Public Overrides Function CreateUser(username As String, password As String, email As String, passwordQuestion As String, passwordAnswer As String, isApproved As Boolean, providerUserKey As Object, ByRef status As System.Web.Security.MembershipCreateStatus) As System.Web.Security.MembershipUser

    End Function

    Public Overrides Function DeleteUser(username As String, deleteAllRelatedData As Boolean) As Boolean

    End Function

    Public Overrides ReadOnly Property EnablePasswordReset As Boolean
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property EnablePasswordRetrieval As Boolean
        Get

        End Get
    End Property

    Public Overrides Function FindUsersByEmail(emailToMatch As String, pageIndex As Integer, pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection

    End Function

    Public Overrides Function FindUsersByName(usernameToMatch As String, pageIndex As Integer, pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection

    End Function

    Public Overrides Function GetAllUsers(pageIndex As Integer, pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection

    End Function

    Public Overrides Function GetNumberOfUsersOnline() As Integer

    End Function

    Public Overrides Function GetPassword(username As String, answer As String) As String

    End Function

    Public Overloads Overrides Function GetUser(providerUserKey As Object, userIsOnline As Boolean) As System.Web.Security.MembershipUser

    End Function

    Public Overloads Overrides Function GetUser(username As String, userIsOnline As Boolean) As System.Web.Security.MembershipUser

    End Function

    Public Overrides Function GetUserNameByEmail(email As String) As String

    End Function

    Public Overrides ReadOnly Property MaxInvalidPasswordAttempts As Integer
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property MinRequiredNonAlphanumericCharacters As Integer
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property MinRequiredPasswordLength As Integer
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property PasswordAttemptWindow As Integer
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property PasswordFormat As System.Web.Security.MembershipPasswordFormat
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property PasswordStrengthRegularExpression As String
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property RequiresQuestionAndAnswer As Boolean
        Get

        End Get
    End Property

    Public Overrides ReadOnly Property RequiresUniqueEmail As Boolean
        Get

        End Get
    End Property

    Public Overrides Function ResetPassword(username As String, answer As String) As String

    End Function

    Public Overrides Function UnlockUser(userName As String) As Boolean

    End Function

    Public Overrides Sub UpdateUser(user As System.Web.Security.MembershipUser)

    End Sub

    Public Overrides Function ValidateUser(username As String, password As String) As Boolean

    End Function
End Class
然后在web.config中注册自定义提供程序:

<membership defaultProvider="MyMembership">
    <providers>
        <clear />
        <add 
            name="MyMembership" 
            type="MvcApplication1.MyCustomMembershipProvider, MvcApplication1" enablePasswordRetrieval="false" 
        />
    </providers>
</membership>


所有对
成员身份的调用
现在都将使用您在web.config中注册的自定义成员身份提供程序。

类不是接口,.NET不支持多重继承为什么希望控制器继承成员身份类?通常,您只需从控制器方法中调用静态方法,例如“Membership.ValidateUser(…)”。这就是我收集的内容。如何创建成员资格提供商?我必须省略system.web.mvc.controller吗?或者我应该在单独的文件中创建成员资格提供程序,然后将其导入控制器?这更多的是一个设计问题,不清楚你在问什么,遇到了什么问题。您不知道如何编写从其方法派生并重写其方法的类?VB.NET语法有问题?类不是接口,.NET不支持多重继承为什么希望控制器继承成员类?通常,您只需从控制器方法中调用静态方法,例如“Membership.ValidateUser(…)”。这就是我收集的内容。如何创建成员资格提供商?我必须省略system.web.mvc.controller吗?或者我应该在单独的文件中创建成员资格提供程序,然后将其导入控制器?这更多的是一个设计问题,不清楚你在问什么,遇到了什么问题。您不知道如何编写从其方法派生并重写其方法的类?VB.NET语法有问题吗?在MVC中,类应该去哪里?那么,我如何在我的控制器中使用该类来执行诸如登录之类的操作(就像“股票”成员资格提供程序一样)?您可以将该类放置在项目的子文件夹中。例如
提供者
。您只需在控制器中使用例如
Membership.ValidateUser(“用户名”、“密码”)
。我已经更新了我的答案来说明。谢谢,我希望这不会太难。应用程序名是否需要覆盖,或者我是否可以忽略它?您可以忽略它。但是从您打算忽略的所有方法中抛出一个
NotImplementedException
。以后调试问题会更容易。不幸的是,当我实现抽象类时,VisualStudio没有为我生成它们,这是它使用C#自动完成的。我不知道为什么它不使用VB.NET,但请确保您这样做了,并且不要将这些方法留空。在MVC中,类应该放在哪里?那么,我如何在我的控制器中使用该类来执行诸如登录之类的操作(就像“股票”成员资格提供程序一样)?您可以将该类放置在项目的子文件夹中。例如
提供者
。您只需在控制器中使用例如
Membership.ValidateUser(“用户名”、“密码”)
。我已经更新了我的答案来说明。谢谢,我希望这不会太难。应用程序名是否需要覆盖,或者我是否可以忽略它?您可以忽略它。但是从您打算忽略的所有方法中抛出一个
NotImplementedException
。以后调试问题会更容易。不幸的是,当我实现抽象类时,VisualStudio没有为我生成它们,这是它使用C#自动完成的。我不知道为什么它没有用VB.NET实现,但请确保你做到了,并且不要将这些方法留空。谢谢你,jgauffin。作为一个承包商,当我完成时,我将移交这个系统,所以我宁愿让它尽可能简单。这看起来是一个很好的解决方案,但我认为Darin的另一个解决方案对于我的代码的未来管理员来说会更容易理解。正确实现成员资格提供程序并不是一件小事。祝你好运。谢谢你,杰戈芬。作为一个承包商,当我完成时,我将移交这个系统,所以我宁愿让它尽可能简单。这看起来是一个很好的解决方案,但我认为Darin的另一个解决方案对于我的代码的未来管理员来说会更容易理解。正确实现成员资格提供程序并不是一件小事。祝你好运