You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 2.0调用AddToRoleAsync报错:用户名无效,仅允许字母或数字

解决.NET Core 2.0 Identity添加角色时报错"User name is invalid, can only contain letters or digits"

这个问题的根源很明确:你把邮箱地址设为了用户名,但.NET Core Identity的默认用户名验证规则只允许字母和数字,而邮箱里包含的@、.等字符不在允许范围内,所以调用AddToRoleAsync时,UserManager会自动校验用户对象的合法性,触发这个错误。

下面是具体的解决步骤:

1. 修改Identity配置,扩展允许的用户名字符

在Startup.cs的ConfigureServices方法中,添加Identity选项配置,把邮箱需要的特殊字符(比如@、.、_)加入到允许的用户名字符列表中:

services.AddDefaultIdentity<ApplicationUser>(options =>
{
    // 扩展允许的用户名字符,兼容邮箱格式
    options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@._-";
})
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();

2. 确认用户对象的UserName字段合法性

确保传入AddToRoleAsync的applicationUser对象的UserName属性确实是标准邮箱格式,没有包含其他不在允许列表里的特殊字符。

补充:为什么Startup中操作角色没问题?

你在Startup的Configure方法中创建角色并给管理员赋值时,可能是直接创建了纯字母数字的用户名(符合默认规则),或者当时的操作没有触发严格的用户名校验逻辑;而后续Controller中处理的用户是用邮箱作为用户名的,刚好触发了默认的验证限制。

修改完配置后,Identity就会认可邮箱格式的用户名,AddToRoleAsync也就不会再抛出这个验证错误了。

内容的提问来源于stack exchange,提问作者user6383418

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:15:35