在本章中,我们将讨论用户注册。 我们现在有一个可以工作的数据库,是时候开始向应用程序添加一些功能。 我们还配置了我们的应用程序,我们有一个工作数据库schema。 让我们现在去应用程序主页。
按F12打开开发人员工具,然后单击编辑链接。 以前,当我们单击编辑链接时,MVC框架检测到Authorize属性的存在,并返回401状态代码,因为用户未登录。
您现在将看到我们从配置文件在屏幕上收到一条消息。
让我们现在去看看开发工具。
-
您将看到浏览器请求编辑页面,并且MVC框架决定用户无权查看此资源。
-
所以在MVC框架内部,生成了401状态码。
-
我们现在有Identity中间件。身份中间件查看将要发送给用户的401状态代码,并用302状态代码替换它,该状态代码是重定向状态代码。
-
Identity框架知道用户必须尝试登录才能访问此资源。
-
Identity框架指导我们到这个URL,我们可以在地址栏 - / Account / Login中看到。
-
当您注册这些服务和中间件时,这是一个带有Identity框架的可配置端点,位于Startup中。您可以设置不同的选项,其中一个选项是更改登录URL。
-
默认情况下,URL为/ Account / Login。目前,我们没有帐户控制器,因此最终我们要做的是创建一个帐户控制器并允许用户登录。
-
但在用户甚至可以登录之前,他们将需要在网站上注册并保存他们的用户名和密码。
-
登录和注册功能都可以是帐户控制器的一部分。
现在让我们继续前进,在Controllers文件夹中添加一个新类,并将其称为AccountController。我们将从MVC框架基础的Controller类派生。
using Microsoft.AspNet.Mvc; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; namespace FirstAppDemo.Controllers { public class AccountController : Controller { } }
-
我们现在必须设置一个功能,用户可以注册此网站。
-
它将非常像一个编辑表单。
-
当用户想要注册时,我们将首先显示一个表单,以便他们填写所需的信息。 然后,他们可以将此表单上传到网站。
-
然后将此信息保存在数据库中。
让我们现在创建一个动作,当我们去/ account / register时返回一个视图。
public class AccountController : Controller { [HttpGet] public ViewResult Register() { return View(); } }
我们不需要查找任何东西,用户将提供我们需要的所有信息。 在为该视图构建ViewModel之前,我们需要确定视图将显示的信息。 我们还需要决定我们需要从用户那里收到的信息吗?
让我们通过在AccountController.cs文件中添加一个新类并将其调用RegisterViewModel来为这个场景创建一个视图模型。
让我们创建一些属性,它们将包含用户名,密码以及用户ConfirmPassword,方法是键入两次,并确保两个密码匹配,如以下程序所示。
public class RegisterViewModel { [Required, MaxLength(256)] public string Username { get; set; } [Required, DataType(DataType.Password)] public string Password { get; set; } [DataType(DataType.Password), Compare(nameof(Password))] public string ConfirmPassword { get; set; } }
在上面的类中,您可以看到一些注释,可以帮助我们验证此模型。 此处需要用户名,如果查看数据库Schema,你会发现用于保存用户名的列长度为256个字符。
-
我们还将在此处使用MaxLength属性。
-
页面将需要输入密码,并且当我们为此密码呈现输入时,我们希望输入类型为密码类型,以便字符不显示在屏幕上。
-
Confirm Password也将是DataType密码,然后有一个额外的比较属性。 我们将ConfirmPassword字段与我们可以指定的其他属性(即密码字段)进行比较。
让我们现在创建我们需要的视图。 我们需要向视图中添加一个新文件夹,并将其称为Account,所有与AccountController相关的所有视图都将添加到此文件夹中。
现在,右键单击Account文件夹,然后选择Add → New Item。
在中间窗格中,选择MVC视图页并命名为Register.cshtml,然后单击添加按钮。
从Register.cshtml文件中删除所有现有代码,并添加以下代码。
@model RegisterViewModel @{ ViewBag.Title = "Register"; } <h1>Register</h1> <form method = "post" asp-controller = "Account" asp-action = "Register"> <div asp-validation-summary = "ValidationSummary.ModelOnly"></div> <div> <label asp-for = "Username"></label> <input asp-for = "Username" /> <span asp-validation-for = "Username"></span> </div> <div> <label asp-for = "Password"></label> <input asp-for = "Password" /> <span asp-validation-for = "Password"></span> </div> <div> <label asp-for = "ConfirmPassword"></label> <input asp-for = "ConfirmPassword" /> <span asp-validation-for = "ConfirmPassword"></span> </div> <div> <input type = "submit" value = "Register" /> </div> </form>
-
你现在可以看到我们已经将模型指定为我们刚刚创建的RegisterViewModel。
-
我们还将使用ViewBag设置此页面的标题,我们希望标题为Register。
-
我们还需要创建一个包含用户名,密码和ConfirmPassword的字段的表单。
-
我们还包括一个将显示验证摘要的div。当我们使用ASP验证摘要时,我们需要指定在摘要中显示哪些错误。
-
我们可以将所有错误显示在摘要区域中,或者我们可以说ValidationSummary.ModelOnly,并且从摘要中的模型验证中出现的唯一错误将是与模型相关联的验证错误,而不是特定属性那个模型。
-
换句话说,如果用户不填写其用户名,但用户名是必需的,那么该特定属性将出现验证错误。
-
但是您也可以生成与特定属性不相关联的模型错误,它们将显示在此ValidationSummary中。
-
在一个
-
我们需要一个用户名的标签,用户名的输入以及用户名的验证消息。
-
我们需要用户输入的其他两个属性是相同的,并且将有一个标签和输入,一个跨度的密码和一个标签,一个输入和一个跨度的ConfirmPassword。
-
我们不需要为Password和ConfirmPassword指定输入类型,因为标签助手的asp将确保将输入类型设置为我们的密码。
-
最后,我们需要有注册按钮。当用户点击此按钮时,我们将把表单提交给控制器。
在AccountController中,我们还需要实现一个HttpPost Register操作方法。 让我们回到AccountController并添加以下注册操作如下 -
[HttpPost] public IActionResult Register(RegisterViewModel model){ }}
此操作方法将返回一个IActionResult。 这将收到一个RegisterViewModel。现在,我们需要与Identity框架进行交互,以确保用户是有效的,告诉Identity框架来创建一个用户,然后因为他们刚刚创建的帐户,继续前进,再记录他们。我们将在下一章中看看执行所有这些步骤。
本文标题: Asp.Net Core-用户注册
本文地址:http://www.yuanjiaocheng.net/ASPNET-CORE/core-user-registration.html