Я считаю, что это не тот код, который вы вставили в вопрос, который вызывает проблему.Проблема может быть где-то еще - возможно, в поле зрения.
Я протестировал этот код с различными комбинациями базовых платформ HTTP / Browsers / .Net / .Net, и он работает нормально.
Все, что я могу сделать прямо сейчас, это указать вам, где можно искать ошибку:
Первый указатель, чтобы посмотреть привязку модели
Работая над этим образцом, я понял, что где-то в вашем решении, вероятно, привязка модели неправильно декодирует символ «@» электронной почты.
Обратите внимание, что это применимо, только если вы написали какую-либо собственную логику для привязки значений.Я вижу очень малую вероятность того, что этот указатель поможет вам, так как входные параметры для действия являются примитивными типами данных.
Второй указатель Чтобы посмотреть, что вы делаете в поле зрения
Я подозреваю, что вы получаете имя пользователя и маркер активации, соответственно, в случае второго URL.Но когда вы отправляете свой идентификатор электронной почты с символом «% 40» вместо символа «@», ваше представление не отображается должным образом.Это как-то приводит к тому, что ваш ActivationToken имеет значение NULL.
Сначала необходимо установить точку останова в методе действия, чтобы проверить, что параметры UserName и ActivationToken не пусты.
Если они не пусты, добавьте HttpUtility.UrlDecode, в котором вы назначаете имя пользователя, как показано в следующем коде:
var model = new Verification
{
Username = HttpUtility.UrlDecode(username),
ActivationToken = activationCode
};
Это удалит% 40 из почты и заменит его на "@".персонаж.
Этот второй указатель в основном должен решить вашу проблему.