以上帝的名义
大家好。我正在VS 2017中为我的mvc 5网站创建注册。它有电子邮件确认。激活的URL链接将在电子邮件中完全接收。当我点击它,它工作,它完全来到我的控制器上正确的ActionMethod但我不知道为什么activationCode是null! :|
在它正常工作之前,我的意思是激活码不是空的。我不知道发生了什么事!
任何帮助将不胜感激。
编辑:
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 }
);
}
}
答案 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 }
);
}
请注意,路线定义的顺序非常重要。
答案 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 }
);