使用 ASP.NET 与 VB 的身份
Using ASP.NET Identity with VB
我已广泛研究 Google 和该网站,但找不到答案。我正在尝试将 ASP.NET 身份添加到 Visual Studio,并且我一直在处理 this page.
问题是,那篇文章中的所有内容都使用 C#,而我的项目专门使用 Visual Basic(ASP.NET Framework 4.5.1,不是 MVC)。另外,我对网络开发人员太陌生了,无法确切知道要更改什么。我找到了一个 C# 到 VB 的转换器,它在大多数情况下都有效,但我仍然遗漏了一些东西,因为我在 VS 中遇到错误。我什至不能 100% 确定我可以让 Identity 在 VB 而不是 C# 中工作,尽管我不明白为什么不这样做。
我尽量保持简洁,所以我会在 粗体 中指出问题。
这是 register.aspx 页面:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Register.aspx.vb" Inherits="WebFormsIdentity.Register" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body style="font-family: Arial, Helvetica, sans-serif; font-size: small">
<form id="form1" runat="server">
<div>
<h4 style="font-size: medium">Register a new user</h4>
<hr />
<p>
<asp:Literal runat="server" ID="StatusMessage" />
</p>
<div style="margin-bottom:10px">
<asp:Label runat="server" AssociatedControlID="UserName">User name</asp:Label>
<div>
<asp:TextBox runat="server" ID="UserName" />
</div>
</div>
<div style="margin-bottom:10px">
<asp:Label runat="server" AssociatedControlID="Password">Password</asp:Label>
<div>
<asp:TextBox runat="server" ID="Password" TextMode="Password" />
</div>
</div>
<div style="margin-bottom:10px">
<asp:Label runat="server" AssociatedControlID="ConfirmPassword">Confirm password</asp:Label>
<div>
<asp:TextBox runat="server" ID="ConfirmPassword" TextMode="Password" />
</div>
</div>
<div>
<div>
<asp:Button runat="server" OnClick="CreateUser_Click" Text="Register" />
</div>
</div>
</div>
</form>
</body>
</html>
VB 中没有错误,但在 运行 页面之后,我在浏览器中得到 'Parser Error':“ 解析器错误消息:无法加载类型'WebFormsIdentity.Register'.
这是后面的代码;大多数问题都与此页面有关:
Imports Microsoft.AspNet.Identity
Imports Microsoft.AspNet.Identity.EntityFramework
Imports System.Linq
Namespace WebFormsIdentity
Partial Public Class Register
Inherits System.Web.UI.Page
Protected Sub CreateUser_Click(sender As Object, e As EventArgs)
' Default UserStore constructor uses the default connection string named: DefaultConnection
Dim userStore = New UserStore(Of IdentityUser)()
Dim manager = New UserManager(Of IdentityUser)(userStore)
Dim user = New IdentityUser() With { _
Key .UserName = UserName.Text _
}
Dim result As IdentityResult = manager.Create(user, Password.Text)
If result.Succeeded Then
StatusMessage.Text = String.Format("User {0} was created successfully!", user.UserName)
Else
StatusMessage.Text = result.Errors.FirstOrDefault()
End If
End Sub
End Class
End Namespace
在'Dim user'下的那一行,'Key'这个词有这个错误:
Name of field or property being initialized in an object initializer must start with '.'.
在'Dim result'这一行,单词'Password'是这样的:
'Password' is not declared. It may be inaccessible due to its protection level
在'result.Succeeded'下面的行中,单词'StatusMessage'是这样的:
'StatusMessage' is not declared. It may be inaccessible due to its protection level.
最后,同一行,'user.UserName' 有这个:
'UserName' is not a member of 'System.Security.Principal.IPrincipal'.
我只使用 VB 大约六个星期,所以我是一个婴儿开发者。我确实知道如何声明,但我不明白为什么上面 link 的作者不需要在他的代码中做任何额外的事情,除了它是 C#。
无论如何,感谢您的阅读和提前的帮助。
好的。
首先删除单词 "KEY" - 它来自 Telerik 转换器 - 我不知道原因。
第二。在您的 HTML 代码中重复 ID=UserName and ID=Password win name="UserName" and name="Password"
希望这会有所帮助。
我能够解决我的问题。步骤:
1) 完全卸载 VS 2013 Premium
2) 安装 VS 2013 Ultimate
3) 当开始一个新项目时,我没有使用空模板,而是选择了 'Web Forms' 和默认的 'Individual User Account' 身份验证。
4) 从 NuGet 包中安装 'Microsoft ASP.NET Identity EntityFramework'
运行 应用程序正常运行;我能够毫无错误地注册用户。
为了以后参考,正确的代码如下。请注意,必须导入 'Owin' 个引用。
Register.aspx:
<%@ Page Title="Register" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master" CodeBehind="Register.aspx.vb" Inherits="WebFormsIdentity.Register" %>
<%@ Import Namespace="WebFormsIdentity" %>
<%@ Import Namespace="Microsoft.AspNet.Identity" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<h2><%: Title %>.</h2>
<p class="text-danger">
<asp:Literal runat="server" ID="ErrorMessage" />
</p>
<div class="form-horizontal">
<h4>Create a new account</h4>
<hr />
<asp:ValidationSummary runat="server" CssClass="text-danger" />
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="Email" CssClass="col-md-2 control-label">Email</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="Email" CssClass="form-control" TextMode="Email" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
CssClass="text-danger" ErrorMessage="The email field is required." />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-2 control-label">Password</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Password"
CssClass="text-danger" ErrorMessage="The password field is required." />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="ConfirmPassword" CssClass="col-md-2 control-label">Confirm password</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="ConfirmPassword" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="ConfirmPassword"
CssClass="text-danger" Display="Dynamic" ErrorMessage="The confirm password field is required." />
<asp:CompareValidator runat="server" ControlToCompare="Password" ControlToValidate="ConfirmPassword"
CssClass="text-danger" Display="Dynamic" ErrorMessage="The password and confirmation password do not match." />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<asp:Button runat="server" OnClick="CreateUser_Click" Text="Register" CssClass="btn btn-default" />
</div>
</div>
</div>
</asp:Content>
Register.aspx.vb:
Imports System
Imports System.Linq
Imports System.Web
Imports System.Web.UI
Imports Microsoft.AspNet.Identity
Imports Microsoft.AspNet.Identity.EntityFramework
Imports Microsoft.AspNet.Identity.Owin
Imports Owin
Partial Public Class Register
Inherits Page
Protected Sub CreateUser_Click(sender As Object, e As EventArgs)
Dim userName As String = Email.Text
Dim manager = Context.GetOwinContext().GetUserManager(Of ApplicationUserManager)()
Dim signInManager = Context.GetOwinContext().Get(Of ApplicationSignInManager)()
Dim user = New ApplicationUser() With {.UserName = userName, .Email = userName}
Dim result = manager.Create(user, Password.Text)
If result.Succeeded Then
' For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
' Dim code = manager.GenerateEmailConfirmationToken(user.Id)
' Dim callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request)
' manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=""" & callbackUrl & """>here</a>.")
signInManager.SignIn(user, isPersistent := False, rememberBrowser := False)
IdentityHelper.RedirectToReturnUrl(Request.QueryString("ReturnUrl"), Response)
Else
ErrorMessage.Text = result.Errors.FirstOrDefault()
End If
End Sub
End Class
我已广泛研究 Google 和该网站,但找不到答案。我正在尝试将 ASP.NET 身份添加到 Visual Studio,并且我一直在处理 this page.
问题是,那篇文章中的所有内容都使用 C#,而我的项目专门使用 Visual Basic(ASP.NET Framework 4.5.1,不是 MVC)。另外,我对网络开发人员太陌生了,无法确切知道要更改什么。我找到了一个 C# 到 VB 的转换器,它在大多数情况下都有效,但我仍然遗漏了一些东西,因为我在 VS 中遇到错误。我什至不能 100% 确定我可以让 Identity 在 VB 而不是 C# 中工作,尽管我不明白为什么不这样做。
我尽量保持简洁,所以我会在 粗体 中指出问题。
这是 register.aspx 页面:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Register.aspx.vb" Inherits="WebFormsIdentity.Register" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body style="font-family: Arial, Helvetica, sans-serif; font-size: small">
<form id="form1" runat="server">
<div>
<h4 style="font-size: medium">Register a new user</h4>
<hr />
<p>
<asp:Literal runat="server" ID="StatusMessage" />
</p>
<div style="margin-bottom:10px">
<asp:Label runat="server" AssociatedControlID="UserName">User name</asp:Label>
<div>
<asp:TextBox runat="server" ID="UserName" />
</div>
</div>
<div style="margin-bottom:10px">
<asp:Label runat="server" AssociatedControlID="Password">Password</asp:Label>
<div>
<asp:TextBox runat="server" ID="Password" TextMode="Password" />
</div>
</div>
<div style="margin-bottom:10px">
<asp:Label runat="server" AssociatedControlID="ConfirmPassword">Confirm password</asp:Label>
<div>
<asp:TextBox runat="server" ID="ConfirmPassword" TextMode="Password" />
</div>
</div>
<div>
<div>
<asp:Button runat="server" OnClick="CreateUser_Click" Text="Register" />
</div>
</div>
</div>
</form>
</body>
</html>
VB 中没有错误,但在 运行 页面之后,我在浏览器中得到 'Parser Error':“ 解析器错误消息:无法加载类型'WebFormsIdentity.Register'.
这是后面的代码;大多数问题都与此页面有关:
Imports Microsoft.AspNet.Identity
Imports Microsoft.AspNet.Identity.EntityFramework
Imports System.Linq
Namespace WebFormsIdentity
Partial Public Class Register
Inherits System.Web.UI.Page
Protected Sub CreateUser_Click(sender As Object, e As EventArgs)
' Default UserStore constructor uses the default connection string named: DefaultConnection
Dim userStore = New UserStore(Of IdentityUser)()
Dim manager = New UserManager(Of IdentityUser)(userStore)
Dim user = New IdentityUser() With { _
Key .UserName = UserName.Text _
}
Dim result As IdentityResult = manager.Create(user, Password.Text)
If result.Succeeded Then
StatusMessage.Text = String.Format("User {0} was created successfully!", user.UserName)
Else
StatusMessage.Text = result.Errors.FirstOrDefault()
End If
End Sub
End Class
End Namespace
在'Dim user'下的那一行,'Key'这个词有这个错误:
Name of field or property being initialized in an object initializer must start with '.'.
在'Dim result'这一行,单词'Password'是这样的:
'Password' is not declared. It may be inaccessible due to its protection level
在'result.Succeeded'下面的行中,单词'StatusMessage'是这样的:
'StatusMessage' is not declared. It may be inaccessible due to its protection level.
最后,同一行,'user.UserName' 有这个:
'UserName' is not a member of 'System.Security.Principal.IPrincipal'.
我只使用 VB 大约六个星期,所以我是一个婴儿开发者。我确实知道如何声明,但我不明白为什么上面 link 的作者不需要在他的代码中做任何额外的事情,除了它是 C#。
无论如何,感谢您的阅读和提前的帮助。
好的。 首先删除单词 "KEY" - 它来自 Telerik 转换器 - 我不知道原因。 第二。在您的 HTML 代码中重复 ID=UserName and ID=Password win name="UserName" and name="Password" 希望这会有所帮助。
我能够解决我的问题。步骤:
1) 完全卸载 VS 2013 Premium
2) 安装 VS 2013 Ultimate
3) 当开始一个新项目时,我没有使用空模板,而是选择了 'Web Forms' 和默认的 'Individual User Account' 身份验证。
4) 从 NuGet 包中安装 'Microsoft ASP.NET Identity EntityFramework'
运行 应用程序正常运行;我能够毫无错误地注册用户。
为了以后参考,正确的代码如下。请注意,必须导入 'Owin' 个引用。
Register.aspx:
<%@ Page Title="Register" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master" CodeBehind="Register.aspx.vb" Inherits="WebFormsIdentity.Register" %>
<%@ Import Namespace="WebFormsIdentity" %>
<%@ Import Namespace="Microsoft.AspNet.Identity" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<h2><%: Title %>.</h2>
<p class="text-danger">
<asp:Literal runat="server" ID="ErrorMessage" />
</p>
<div class="form-horizontal">
<h4>Create a new account</h4>
<hr />
<asp:ValidationSummary runat="server" CssClass="text-danger" />
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="Email" CssClass="col-md-2 control-label">Email</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="Email" CssClass="form-control" TextMode="Email" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
CssClass="text-danger" ErrorMessage="The email field is required." />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-2 control-label">Password</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Password"
CssClass="text-danger" ErrorMessage="The password field is required." />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="ConfirmPassword" CssClass="col-md-2 control-label">Confirm password</asp:Label>
<div class="col-md-10">
<asp:TextBox runat="server" ID="ConfirmPassword" TextMode="Password" CssClass="form-control" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="ConfirmPassword"
CssClass="text-danger" Display="Dynamic" ErrorMessage="The confirm password field is required." />
<asp:CompareValidator runat="server" ControlToCompare="Password" ControlToValidate="ConfirmPassword"
CssClass="text-danger" Display="Dynamic" ErrorMessage="The password and confirmation password do not match." />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<asp:Button runat="server" OnClick="CreateUser_Click" Text="Register" CssClass="btn btn-default" />
</div>
</div>
</div>
</asp:Content>
Register.aspx.vb:
Imports System
Imports System.Linq
Imports System.Web
Imports System.Web.UI
Imports Microsoft.AspNet.Identity
Imports Microsoft.AspNet.Identity.EntityFramework
Imports Microsoft.AspNet.Identity.Owin
Imports Owin
Partial Public Class Register
Inherits Page
Protected Sub CreateUser_Click(sender As Object, e As EventArgs)
Dim userName As String = Email.Text
Dim manager = Context.GetOwinContext().GetUserManager(Of ApplicationUserManager)()
Dim signInManager = Context.GetOwinContext().Get(Of ApplicationSignInManager)()
Dim user = New ApplicationUser() With {.UserName = userName, .Email = userName}
Dim result = manager.Create(user, Password.Text)
If result.Succeeded Then
' For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
' Dim code = manager.GenerateEmailConfirmationToken(user.Id)
' Dim callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request)
' manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=""" & callbackUrl & """>here</a>.")
signInManager.SignIn(user, isPersistent := False, rememberBrowser := False)
IdentityHelper.RedirectToReturnUrl(Request.QueryString("ReturnUrl"), Response)
Else
ErrorMessage.Text = result.Errors.FirstOrDefault()
End If
End Sub
End Class