Почему мое поле ViewModel становится пустым, когда URL кодируется в формате HTML? - PullRequest
0 голосов
/ 27 января 2019

Я столкнулся со странной проблемой, иногда я получаю URL-адрес из sendgrid как

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);
        }

во 2-м случае, ActivationToken имеет нулевое значение. Как я могу обнаружить ActivToken, даже если URL закодирован?

1 Ответ

0 голосов
/ 30 января 2019

Я считаю, что это не тот код, который вы вставили в вопрос, который вызывает проблему.Проблема может быть где-то еще - возможно, в поле зрения.

Я протестировал этот код с различными комбинациями базовых платформ HTTP / Browsers / .Net / .Net, и он работает нормально.

Все, что я могу сделать прямо сейчас, это указать вам, где можно искать ошибку:

Первый указатель, чтобы посмотреть привязку модели

Работая над этим образцом, я понял, что где-то в вашем решении, вероятно, привязка модели неправильно декодирует символ «@» электронной почты.
Обратите внимание, что это применимо, только если вы написали какую-либо собственную логику для привязки значений.Я вижу очень малую вероятность того, что этот указатель поможет вам, так как входные параметры для действия являются примитивными типами данных.

Второй указатель Чтобы посмотреть, что вы делаете в поле зрения

Я подозреваю, что вы получаете имя пользователя и маркер активации, соответственно, в случае второго URL.Но когда вы отправляете свой идентификатор электронной почты с символом «% 40» вместо символа «@», ваше представление не отображается должным образом.Это как-то приводит к тому, что ваш ActivationToken имеет значение NULL.

Сначала необходимо установить точку останова в методе действия, чтобы проверить, что параметры UserName и ActivationToken не пусты.

Если они не пусты, добавьте HttpUtility.UrlDecode, в котором вы назначаете имя пользователя, как показано в следующем коде:

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

Это удалит% 40 из почты и заменит его на "@".персонаж.

Этот второй указатель в основном должен решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...