.net-core - 验证失败:InvalidRoleName
问题描述
我的代码有一些问题。我无法创建角色。该代码对我来说似乎很好,但我无法找到错误。使用 WriteLine 我收到以下消息:
Microsoft.AspNetCore.Identity.RoleManager: Warning: Role 38676182-f211-47d7-b69b-f190e4338123 validation failed: InvalidRoleName.
为什么 InvalidRoleName 无效?这只是一个字符串。任何帮助表示赞赏。
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Sarpinos.Pages.Admin
{
public class CreateRoleModel : PageModel
{
private readonly RoleManager<IdentityRole> _roleManager;
public CreateRoleModel(RoleManager<IdentityRole> roleManager)
{
_roleManager = roleManager;
}
[BindProperty]
public List<IdentityRole> Roles { get; set; }
public void OnGet()
{
}
public async Task<IActionResult> OnPost()
{
if (ModelState.IsValid)
{
var newRole = new IdentityRole();
newRole.Id = Guid.NewGuid().ToString();
await _roleManager.CreateAsync(newRole);
Console.WriteLine($"{newRole.Id} {newRole.Name}");
}
return RedirectToPage("Dashboard");
}
}
}
cshtml:
@page
@model Sarpinos.Pages.Admin.CreateRoleModel
@{
ViewData["Title"] = "Register";
}
<div class="container">
<form asp-page="CreateRole" method="POST">
<div class="form-group">
<label asp-for="@Model.Roles">Role name:</label>
<input type="text" asp-for="@Model.Roles" class="form-control" placeholder="Enter role name" />
<span asp-validation-for="@Model.Roles" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-success">Create</button>
</form>
</div>
解决方案
[BindProperty] public List<IdentityRole> Roles { get; set; } public void OnGet() { } public async Task<IActionResult> OnPost() { if (ModelState.IsValid) { var newRole = new IdentityRole(); newRole.Id = Guid.NewGuid().ToString(); await _roleManager.CreateAsync(newRole); Console.WriteLine($"{newRole.Id} {newRole.Name}"); } return RedirectToPage("Dashboard"); }
根据您的描述,您似乎想创建一个新角色,但是通过使用上面的代码,您似乎正在使用 aList<IdentityRole>
来显示角色,并且在 post 方法中,您没有为角色设置角色名称新角色。因此,它可能会导致问题。
要创建新角色,在 CreateRoleModel 中,您可以创建一个包含角色相关属性的新类。例如:
public class CreateRoleModel : PageModel
{
private readonly RoleManager<IdentityRole> _roleManager;
public CreateRoleModel(RoleManager<IdentityRole> roleManager) { _roleManager = roleManager; }
public class NewRole
{
public string RoleName { get; set; }
}
[BindProperty]
public NewRole Input { get; set; }
public void OnGet()
{
Input = new NewRole(); //
}
public async Task<IActionResult> OnPostAsync()
{
if (ModelState.IsValid)
{
var newRole = new IdentityRole();
newRole.Id = Guid.NewGuid().ToString();
newRole.Name = Input.RoleName;
await _roleManager.CreateAsync(newRole);
Console.WriteLine($"{newRole.Id} {newRole.Name}");
}
return RedirectToPage("Home/Index");
}
}
然后,在 CreateRole.cshtml 页面中,基于 NewRole 类插入一个新角色(您可以将命名空间更改为您的)。
@page
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@model IdentitySample.Pages.CreateRoleModel
<div class="container">
<form method="POST">
@Html.AntiForgeryToken()
<div class="form-group">
<label asp-for="@Model.Input.RoleName">Role name:</label>
<input asp-for="@Model.Input.RoleName" class="form-control" placeholder="Enter role name" />
<span asp-validation-for="@Model.Input.RoleName" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-success">Create</button>
</form>
</div>
推荐阅读
- css - CSS 高精度测量、输入、简单表格
- google-cloud-platform - 在 GCP 上,如何配置负载均衡以将用户源 IP 下发到后端?
- flutter - Flutter:当我使用fluttertoast时执行单元测试
- python - 在 date_time 列中按天分组并取平均值
- c++ - 随机 shuffle 函数在 main() 中有效,但在类中无效
- flutter - Flutter:有没有办法在页面转换后的小部件中共享和显示转换前的状态?
- angular - 我无法将数据添加到下拉列表中
- python - 在循环内重新索引数据帧
- python - Pyinstaller:无法创建具有 .png 文件的 onefile .exe
- java - Google Guice 究竟什么时候懒惰地构建 @Singleton 绑定?