单击电子邮件验证链接

时间:2018-04-27 09:27:20

标签: asp.net-mvc-5 registration email-verification

以上帝的名义

大家好。我正在VS 2017中为我的mvc 5网站创建注册。它有电子邮件确认。激活的URL链接将在电子邮件中完全接收。当我点击它,它工作,它完全来到我的控制器上正确的ActionMethod但我不知道为什么activationCode是null! :| 在它正常工作之前,我的意思是激活码不是空的。我不知道发生了什么事! 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 :(得分:1)

为了达到您的需要,您必须将操作参数名称更改为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

答案 1 :(得分:1)

您的默认路由接受名为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 }
);