gpt4 book ai didi

c# - 当 url 是 HTML 编码时,为什么我的 ViewModel 字段变为空?

转载 作者:太空狗 更新时间:2023-10-29 20:19:12 24 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,有时我从 sendgrid 获取 url 作为

https://localhost:81/Activation?username=ats8@test.com&activationToken=EAAAAA

效果很好。但有时我得到的 url 编码如下,

"https://localhost:81/Activation?username=ats8%40test.com&activationToken=EAAAAA "

我的ViewModel如下,

  public class Verification
{
[DataType(DataType.EmailAddress)]
public string Username { get; set; }

[Required]
[DataType(DataType.Password)]
public string Password { get; set; }

[Required]
[DataType(DataType.Password)]
[Compare("Password")]
public string ConfirmPassword { get; set; }

public string ActivationToken { get; set; }

}

方法如下,

 public ActionResult Activation(string username, string activationToken)
{
var model = new Verification
{
Username = username,
ActivationToken = activationToken
};

return View(model);
}

在第二种情况下,activationToken 为空。即使 url 已编码,我如何检测 activationToken?

最佳答案

我相信引起问题的不是您粘贴的有问题的代码。问题可能在其他地方 - 可能在 View 中。

我已经使用 HTTP 版本/浏览器/.Net/.Net 核心框架的各种组合测试了这段代码,它运行良好。

我现在所能做的就是为您提供有关查找错误的位置的指示:

在模型绑定(bind)中查找的第一个指针

在处理此示例时,我意识到,您的解决方案中的某处可能模型绑定(bind)未正确解码电子邮件“@”字符。
请注意,这仅在您编写了任何自定义逻辑来绑定(bind)值时才适用。我认为该指针对您有帮助的可能性很小,因为操作的输入参数是原始数据类型。

第二个指针在 View 中查找您正在做什么

我怀疑您在第二个 URL 的情况下正确地获得了用户名和激活 token 。但是,当您发送带有“%40”而不是“@”字符的电子邮件 ID 时,您的 View 无法正确呈现。这会以某种方式导致您的 activationToken 为 NULL。

您应该首先在 action 方法中放置断点,以检查 UserName 和 ActivationToken 参数是否为非空。

如果它们不为空,则在您分配用户名的地方添加 HttpUtility.UrlDecode,如下面的代码所示:

var model = new Verification
{
Username = HttpUtility.UrlDecode(username),
ActivationToken = activationCode
};

这将从邮件中删除 %40 并将其替换为“@”字符。

第二个指针主要应该可以解决您的问题。

关于c# - 当 url 是 HTML 编码时,为什么我的 ViewModel 字段变为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54390525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com