验证失败:InvalidRoleName
Validation failed: 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");
}
根据你的描述,你似乎想创建一个新的角色,但是通过使用上面的代码,看起来你正在使用 List<IdentityRole>
来显示角色并且在 post 方法,您没有为 newRole 设置角色名称。所以,这可能会导致问题。
要创建新角色,在 CreateRoleModel 中,您可以创建一个包含角色相关属性的新 class。例如:
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页面,根据NewRoleclass插入一个新的角色(你可以把命名空间改成你自己的)。
@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>
我的代码有问题。我无法创建角色。代码对我来说似乎没问题,但我找不到错误。使用 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"); }
根据你的描述,你似乎想创建一个新的角色,但是通过使用上面的代码,看起来你正在使用 List<IdentityRole>
来显示角色并且在 post 方法,您没有为 newRole 设置角色名称。所以,这可能会导致问题。
要创建新角色,在 CreateRoleModel 中,您可以创建一个包含角色相关属性的新 class。例如:
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页面,根据NewRoleclass插入一个新的角色(你可以把命名空间改成你自己的)。
@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>