MVC 5的帐户确认

时间:2015-02-25 01:57:40

标签: c# asp.net asp.net-mvc

我在使用ASP.NET MVC网站设置帐户验证时遇到了问题。

我已经学过几个教程,但我无法在我的应用程序中使用它。电子邮件中生成的代码如下所示:

http://localhost:32939/confirm/14/Pgwmt6CTw3Mev/AuzYmGOjqQBK3ZUEz6ncRV67rB3FSsrRwKJJKezRRymlnfMmUglHcPuDXvgtJ6JB7nCEWlojIflU7OyOscEd6afx7slWlycTyW6KbMOeqO0CWzpPPycOXnr4qpqffUZQ5BCq86Lw%3d%3d

确认后的所有内容都是代码。我正在使用基于属性的路由 - 这可能是问题的原因吗?

以下是我如何实现它:

private OperationResult SendConfirmation(Profile Item)
{
    try
    {
        string Callback = Url.Action("Confirm", "SpaceHome", new { Area = "Space", ID = Item.Profile.Id, Code = Code }, protocol: Request.Url.Scheme);

        string EmailBody = String.Format("<p>Thank you for signing up for our site.</p><p>Please use the following link to confirm your account.</p><a class='btn btn-blue' href=\"{0}\">Confirm Account</a>", Callback);

        Q.Users.SendEmail(Item.User.Id, "Account Confirmation", EmailBody);

        return OperationResult.Success();
    }
    catch (Exception ex)
    {
        return OperationResult.Failure(ex);
    }
}

电子邮件按预期到达。这是我的控制器:

[HttpGet, Route("confirm/{ID:int}/{Code}"), AllowAnonymous]
public ActionResult Confirm(int ID, string Code)
{
    OperationResult Result = new OperationResult(Q.Users.ConfirmEmail(ID, Code));
    return View();
}

当我将生成的URL输入浏览器时,Controller永远不会被激活。相反,我收到404错误。我做错了什么?

1 个答案:

答案 0 :(得分:2)

问题是您的代码包含/字符,导致您的路由未被选中。

不幸的是,属性路由似乎不支持catch-all slug,就像标准的MVC路由一样。因此,您可能必须使用catch-all slug(即{* code})

来定义标准路线
routes.MapRoute(
    name: "Confirm",
    url: "confirm/{ID}/{*Code}",
    defaults: new { controller = "Account", action = "Confirm" });