Aspnet Core 3.1 Identity ConfirmEmail 未按预期工作

Aspnet Core 3.1 Identity ConfirmEmail not working as expected

我使用的是 aspnet core 托管的 blazor wasm 项目类型。我正在尝试通过发送给用户的电子邮件 link 来确认用户帐户。

正在生成并发送电子邮件。生成的确认 link 是: https://localhost:5001/accountconfirmation?code=CfDJ8L2gJclnoq5BioPxBNdLc8wCyaMHcitemYm7I8XKkey+M+vauvFOj0HN1meMs6JusAIMNd8gFCe/e8U0w3MMa0blmDzAMqrXGHvekYo5iPGeFlzLrY2guPO1iwAhUlQJ4t6ZRk5ieyGcgREID/9G8rwJKYC+Ct4WXtQiyfywGpixo63Y4B4hNdQquQE5trdzF0bOyeq2lJhbAlhe5TnsnGqiKbJq60oCuR07M/Gcp9URBLPYVCbG7Ymi+4BUUCRA/Q==&userId=5742c1f1-7957-4154-b12d-5e6e3eaebd0f

单击电子邮件 link 时,用户将导航到 Blazor 前端 Web 应用程序,然后该应用程序将查询字符串参数发布到 AccountsController 操作。在控制器操作中正确接收值。

我希望此操作方法将帐户设置为已确认,但这并没有发生。我也尝试 URL 编码代码,但仍然没有 success.The userId 是一个 GUID 并作为字符串传递。

    [HttpGet]
    [Route(Urls.ConfirmAccount)]
    public async Task<IdentityResult> Confirm([FromQuery]string code,[FromQuery]string userId)
    {
        var user = await _userManager.FindByIdAsync(userId);
        IdentityResult result = await _userManager.ConfirmEmailAsync(user, code);

        return result;
    }

尝试添加 Base64UrlDecode

    [HttpGet]
    [Route(Urls.ConfirmAccount)]
    public async Task<IdentityResult> Confirm([FromQuery]string code,[FromQuery]string userId)
    {
        code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
        var user = await _userManager.FindByIdAsync(userId);
        IdentityResult result = await _userManager.ConfirmEmailAsync(user, code);

        return result;
    }

这来自一个工作示例:https://github.com/ADefWebserver/Blazor-Blogs/blob/master/BlazorBlogs/Areas/Identity/Pages/Account/ConfirmEmail.cshtml.cs