c# - 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)。
解决方案
我通过将 POST 更改为 GET 并使用 [FromQuery] 属性来解决此问题,使我能够生成更传统的查询字符串参数样式 URL,该 URL 提供必要的查询字符串参数值。
我还必须确保在使用 WebUtility.EncodeUrl 方法创建确认 URL 时对电子邮件确认令牌进行编码,但我发现使用 ASP.NET Core 我的控制器方法(具有 [FromQuery] 属性)正在解码传入的字符串,所以我不需要在到达时解码 - 但这可能是我正在使用的最新版本的 ASP.NET Core 2.2 中的一个功能。
推荐阅读
- regex - Bigquery 正则表达式在多个空格后提取数字
- mysql - 从nodejs连接到mysql PHPMyAdmin时出现PROTOCOL_CONNECTION_LOST错误
- java - 序列生成器每次编译时都会从一个新值开始
- python - 在没有 CMD 的情况下运行 Flask API
- python - Python Selenium 获取元素未找到该元素
- php - Laravel 国家代码和电话号码验证
- excel - 如何通过从下一列的单元格中选择年份来填充 Excel 中日期为 30/06/YEAR 的空白单元格
- c++11 - 使用 c++11 编译的 ros kinetic 似乎不起作用
- tomcat - 服务注册表 ping 失败,将重试。错误:获取“http://localhost:8040/access/api/v1/system/ping”:拨号 tcp [::1]:连接:连接被拒绝
- python - 我如何找出特定城市的县人口普查区