我在使用ASP.NET MVC网站设置帐户验证时遇到了问题。
我已经学过几个教程,但我无法在我的应用程序中使用它。电子邮件中生成的代码如下所示:
确认后的所有内容都是代码。我正在使用基于属性的路由 - 这可能是问题的原因吗?
以下是我如何实现它:
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错误。我做错了什么?
答案 0 :(得分:2)
问题是您的代码包含/字符,导致您的路由未被选中。
不幸的是,属性路由似乎不支持catch-all slug,就像标准的MVC路由一样。因此,您可能必须使用catch-all slug(即{* code})
来定义标准路线routes.MapRoute(
name: "Confirm",
url: "confirm/{ID}/{*Code}",
defaults: new { controller = "Account", action = "Confirm" });