Код активации в моем методе не имеет значения, когда я нажимаю ссылку подтверждения по электронной почте. - PullRequest
0 голосов
/ 27 апреля 2018

Во имя Бога

Привет всем. Я создаю регистрацию для моего веб-сайта mvc 5 в VS 2017. В нем есть подтверждение по электронной почте. URL-ссылка для активации будет получена полностью по электронной почте. когда я нажимаю, это работает, и это точно приходит к моему контроллеру на правильном ActionMethod, но я не знаю, почему код активации равен нулю! : | Хотя раньше он работал правильно, я имею в виду, что код активации не был нулевым. Я не знаю, что с этим случилось! image enter image description here

Любая помощь будет оценена.

Отредактировано:

 public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
       name: "Password",
       url: "{controller}/{action}/{passwordResetCode}",
       defaults: new { controller = "Authentication", action = "ResetPassword" }
   );
        routes.MapRoute(
       name: "Activation",
       //url: "{controller}/{action}/{activationCode}",
       url: "Authentication/VerifyAccount/{activationCode}", 
       defaults: new { controller = "Authentication", action = "VerifyAccount" }
   );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Ваш маршрут по умолчанию принимает параметр с именем id, а не activationCode. Вам либо нужно изменить метод контроллера на

public ActionResult VerifyTheAccount(string id)

и измените ссылку, чтобы установить id, например (из ваших комментариев)

var verifyURL = "/Authentication/VerifyTheAccount/" + activationCode

или с использованием предпочтительного Url.Action() метода

var verifyURL = '@Url.Action("VerifyTheAccount", "Authentication", new { id = activationCode })

В качестве альтернативы вам нужно создать определенное определение маршрута до DefaultRoute

routes.MapRoute(
   name: "Activation",
   url: "Authentication/VerifyTheAccount/{activationCode}",
   defaults: new { controller = "Authentication", action = "VerifyTheAccount" }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
0 голосов
/ 27 апреля 2018

Чтобы достичь того, что вам нужно, вы должны изменить имя параметра действия на id или добавить дополнительный маршрут к RouteConfig следующим образом:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
           name: "Activation",
           url: "{controller}/{action}/{activationCode}",
           defaults: new { controller = "Authentication", action = "VerifyTheAccount" }
       );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

    }

Обратите внимание, что порядок определения маршрутов очень важен.

Теперь при запуске приложения вы получите следующие результаты: Debug result

А внутри браузера: enter image description here

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