c# - Azure 应用服务处理编码加号登录 URL 错误
问题描述
我有一个使用 ASP.NET Core Identity 进行用户管理的 ASP.NET Core 2.1 应用程序。如果有人忘记了密码,我会使用 Identity SDK 生成密码重置令牌。然后我将链接邮寄给用户以重置他们的密码。链接如下所示:
https://mywebsite.com/account/resetpassword/{resetToken}
在“{resetToken}”的位置,我放置了 Identity SDK 为我生成的重置令牌的 URL 编码版本。URL 编码是必要的,因为令牌可能包含特殊字符。
在我的本地机器上测试忘记密码流程时,一切正常,因此在代码审查后,我将其发布到我们在 Azure 中的测试环境中。但是在 Azure 上进行测试时,当我尝试访问密码重置链接时,我得到了 404。生成的链接如下所示:
https://mywebsite.com/account/resetpassword/CfDJ8OdSMUPTC9lCpLB%2fYMsf17DY75oSHdCdv4KL9RTOxbAP2ukPYdX1oY8rh5A%2bRO4p3j8uBVhtSRedi1AoPxVCvNigrcSltViBkCrU9dKRM3YKrE%2fCqPRvZcP%2b9aGdadnnQlFM%2b%2bhcJ8LJHtkmEcEoTkCC0MMfNR3ttDM7L2%2boK1MhKuaqxKKeYH6iyAeK6sJe5g%3d%3d
在对 URL 进行了一番摆弄之后,我得出的结论是编码的 + 符号 (%2b) 出了点问题。因为如果我从 URL 中删除它,它会成功将我带到重置密码页面,但显然会抛出错误,因为令牌无效。
部分接收操作方法如下所示:
[HttpGet]
[Route("[controller]/[action]/{*resetToken}")]
public IActionResult ResetPassword(string resetToken)
我做错了什么还是 Azure 处理 URL 的方式不是我的本地机器?
解决方案
推荐阅读
- node.js - NodeJS 中巨大的 JSON 对象处理
- google-cloud-platform - Google Cloud Billing:如何配置发送预算通知的时间
- sql - SQL Server 中的数学问题
- c++ - Microsoft Detours:缺少宏
- h2 - 使用runscript时如何在h2数据库中导入外部库
- javascript - 地图的最后一个条目没有被删除?
- javascript - 我有一个按钮可以重定向另一个表单 我希望下拉菜单中的按钮值作为下一页表单中的选定选项?
- android - 升级到 androidX 后崩溃
- autotools - Autotools:PROGRAMS 安装路径
- java - thriftmethod 升级版本时枚举,枚举值错误