Guid 应包含 32 位数字和 4 个破折号 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) 和有效的 c# 构造函数

Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) with valid c# constructor

var username = User.FindFirst(ClaimTypes.Email)?.Value;
var userid = new Guid(username);

为什么这会导致出现 Guid FormatException?

Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

Guid 的构造函数允许我传入一个字符串,我传入了一个字符串,所以它应该可以工作!

错误消息确实说明了一切 - Guid 的构造函数不接受任何奇数字符串,它需要一个非常特定格式的字符串 - “32 位数字和 4 个破折号 (xxxxxxxx-xxxx- xxxx-xxxx-xxxxxxxxxxxx)”,例如“12345678-1234-1234-1234-12345678”。

那是因为索赔电子邮件包含电子邮件而不是对象 GUID。检查声明包含 GUID 的调试器。通常 NameIdentifies 是您要搜索的声明:

User.FindFirst(ClaimTypes.NameIdentifier)