首页 > 解决方案 > ASP.NET Core 2.2 Web API 项目:使用端点实现电子邮件确认回调 url

问题描述

在生成确认令牌然后向用户发送确认电子邮件链接方面,我正在尝试与 Microsoft (docs) 提供的示例稍有不同。

目前,我在创建用户的 CreateUserAsync 控制器方法中有几个步骤,如果成功生成电子邮件确认令牌(使用 GenerateEmailConfirmationTokenAsync 方法) - 到目前为止一切都很好,生成了一个看似有效的令牌。

然后下一步是生成一个确认电子邮件链接(使用 Request.Scheme、Request.Host 等属性),使用 SendGrid(根据 Microsoft 文档配置)通过电子邮件发送给用户 - 这一步效果很好,我可以看到测试电子邮件出现在测试 Gmail 帐户中。

问题似乎是生成的代码(令牌) - 我尝试使用 WebUtility 的 UrlEncode 方法,但这对令牌没有任何作用,它保持不变,当我尝试测试 URL 时,我收到一条消息:

请求过滤模块用于拒绝包含双转义序列的请求

关于如何在 Web API 项目中实现上述内容的任何建议(与 Microsoft Doc 站点上的示例相反:https ://docs.microsoft.com/en-us/aspnet/core/security/authentication/accconfirm?view =aspnetcore-2.2&tabs=visual-studio)。

标签: c#asp.net-coreasp.net-core-webapi

解决方案


我通过将 POST 更改为 GET 并使用 [FromQuery] 属性来解决此问题,使我能够生成更传统的查询字符串参数样式 URL,该 URL 提供必要的查询字符串参数值。

我还必须确保在使用 WebUtility.EncodeUrl 方法创建确认 URL 时对电子邮件确认令牌进行编码,但我发现使用 ASP.NET Core 我的控制器方法(具有 [FromQuery] 属性)正在解码传入的字符串,所以我不需要在到达时解码 - 但这可能是我正在使用的最新版本的 ASP.NET Core 2.2 中的一个功能。


推荐阅读