我使用默認欄位(“電子郵件”、“密碼”、“確認密碼”)和自定義欄位“名稱”創建了一個帶有 ASP.NET Core 標識的注冊表單。當我在名稱欄位中輸入隨機字串值并按“注冊”時,我總是收到以下錯誤訊息:
“用戶名''無效,只能包含字母或數字。”
我嘗試過的事情:
- 我在 AllowedUserNameCharacters 的“用戶”物件上設定了一個選項,但這似乎沒有什么區別:
services.Configure<IdentityOptions>(options =>
{
options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@ ";
}
我的注冊控制器:
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser
{
Name = model.Name,
Email = model.Email
};
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return RedirectToAction("index", "Home");
}
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error.Description);
}
ModelState.AddModelError(string.Empty, "Invalid Login Attempt");
}
return View(model);
}
注冊視圖:
<form method="post">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Name"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Email"></label>
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Password"></label>
<input asp-for="Password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="ConfirmPassword"></label>
<input asp-for="ConfirmPassword" class="form-control" />
<span asp-validation-for="ConfirmPassword" class="text-danger"></span>
</div>
<button type="submit" class="btn-primary">Register</button>
</form>
My appDBContext:
public class AppDBContext : IdentityDbContext<ApplicationUser>
{
private readonly DbContextOptions _options;
public AppDBContext()
{
}
public AppDBContext(DbContextOptions options): base(options)
{
_options = options;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(
@"Server=(localdb)\mssqllocaldb;Database=Codefirst");
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>()
.Property(e => e.Name)
.HasMaxLength(250);
modelBuilder.Entity<ApplicationUser>()
.Property(e => e.Email)
.HasMaxLength(250);
}
}
My applicationuser.cs class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
namespace SLE_System.Data
{
public class ApplicationUser : IdentityUser
{
public string Name { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string ConfirmPassword { get; set; }
}
}
If anyone has any ideas, these would be much appreciated?
Thanks,
Robert
uj5u.com熱心網友回復:
這里繼承了IdentiyUser類
public class ApplicationUser : IdentityUser
{
public string Name { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string ConfirmPassword { get; set; }
}
根據 Microsoft 檔案鏈接,IdentityUser 類具有以下屬性, 還有一個屬性 UserName 也被繼承。
默認情況下,字串(非 Nullable 屬性)資料型別具有默認資料注釋 [Required("AllowEmptyStrings"=true)]。由于在發送注冊資料時缺少用戶名,但它是必需的,因此會引發錯誤。
uj5u.com熱心網友回復:
"UserName" is invalid, can only contain letters or digits.是關于UserName屬性的默認錯誤訊息。在您的注冊視圖中,沒有輸入 for UserName,因此當您使用CreateAsync()方法注冊用戶時,專案將驗證您的屬性并發現UserName屬性為空并回傳此錯誤訊息。
所以一個簡單的方法是在注冊 ApplicationUser 時給它一個值。
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser
{
Name = model.Name,
UserName = model.Name,
Email = model.Email
};
//.......
但請注意,當您輸入Name屬性時,您需要滿足UserName的驗證規則。默認規則是只支持以下字符
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@ "
您還可以使用以下方法自定義其驗證規則:
services.Configure<IdentityOptions>(options =>
{
options.User.AllowedUserNameCharacters = "xxxxxx";
//..............
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/519421.html
標籤:C#html实体框架asp.net 核心asp.net 身份
