Url 激活令牌无效-控制器有问题吗?

Url 激活令牌无效-控制器有问题吗?,url,urlencode,.net-core-3.1,Url,Urlencode,.net Core 3.1,我有一个很奇怪的问题。在以前版本的.NETCore中,所有功能都可以正常工作,但现在在.NETCore3.1中却不能 问题是,在用户注册帐户后,我向他发送激活电子邮件,激活代码如下所示: var activationCode = await userMan.GenerateEmailConfirmationTokenAsync(su); 接下来,我生成一个http url,其格式如下: http://localhost/api/users/activate?userId=1234&co

我有一个很奇怪的问题。在以前版本的.NETCore中,所有功能都可以正常工作,但现在在.NETCore3.1中却不能

问题是,在用户注册帐户后,我向他发送激活电子邮件,激活代码如下所示:

var activationCode = await userMan.GenerateEmailConfirmationTokenAsync(su);
接下来,我生成一个http url,其格式如下:

http://localhost/api/users/activate?userId=1234&code=abc+860/def==
现在,请注意userId是一个有效的GUID,我的激活代码只是一个示例,因为我确实得到了一个很长的代码。但这段代码中重要的是——它有加号(+)、斜线和以双等号结尾

现在我收到了一封带有有效用户guid和有效激活码的电子邮件。但是,当我点击这个链接,我的UsersController启动时,一些不好的事情发生了。这是我在UserController中的激活方法(代码的一部分)

[路由(“api/[控制器]”)]
[ApiController]
公共类UsersController:ControllerBase
{
[HttpGet(“激活”)]
[异名]
公共异步任务ActivateAccount([FromQuery]Guid用户ID,[FromQuery]字符串代码)
{
if(userId==Guid.Empty | | string.IsNullOrWhiteSpace(代码))
返回请求();
}
}

奇怪的是,
code
参数在这里无效。该值没有加号。相反,它有空间。怎么了?

您需要对参数进行URL编码。一些符号可以在没有这些的情况下被去除。 您可以阅读有关符号和过程的更多信息

您的正确URL将是:

http://localhost/api/users/activate?userId=1234&code=abc%2B860%2Fdef%3D%3D
为了生成正确的URL,您可以在向某人提供URL之前使用。请阅读链接,因为其中有一些细节可能会有所帮助。这是一些常见的URL编码方法


这是一篇很好的文章,列出了所有或大部分的方法,讨论了如何达到峰值。

非常感谢。我刚刚做了:var activationCode=await userMan.GenerateEmailConfirmationTokenAsync(su);activationCode=Uri.EscapeDataString(activationCode);现在它工作得很好。非常感谢您的解释和链接。
http://localhost/api/users/activate?userId=1234&code=abc%2B860%2Fdef%3D%3D