C# 使用MVC 5进行帐户确认

C# 使用MVC 5进行帐户确认,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我在使用ASP.NET MVC网站设置帐户验证时遇到问题 我已经学习了几个教程,但我无法在我的应用程序中使用它。电子邮件中生成的代码如下所示: 确认后的一切都是代码。我正在使用基于属性的路由-这可能是问题的原因吗 下面是我如何实现它的: private OperationResult SendConfirmation(Profile Item) { try { string Callback = Url.Action("Confirm", "SpaceHome"

我在使用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);
    }
}

当我将生成的URL输入浏览器时,控制器从未激活。相反,我收到一个404错误。我做错了什么?

问题是您的代码包含/字符,这导致无法选择您的路线

不幸的是,属性路由似乎不像标准MVC路由那样支持捕获所有slug。因此,您可能必须定义一个标准路由,其中包含一个全捕获段塞(即{*code})


您是否在路由配置中启用了属性路由?您的url也有3个值
14
Pgwmt6CTw3Mev
AuzYmGOjqQ……
,但您的路由定义只有2个。@StephenMuecke-我假设/是代码的一部分,而不是另一部分segment@luke2012-是的,我在整个应用程序中使用属性路由,它是启用的。@StephenMuecke-是的,/是自动生成代码的一部分-他们会使用这个字符似乎很奇怪…我现在正在验证这个-出于好奇,您知道为什么生成的代码包含所有这些增加路由复杂性的非ascii字符吗?我不能创建一个随机的数字字符串吗?@William-所有这些字符都是ASCII字符,我不知道你为什么认为它们不是。数字和数字有什么不同?对不起,我不是指ASCII码,我指的是字母和数字(A-Z和0-9)。当我使用ASP.NET Identity生成代码时,它使用斜杠和加号,这使得我不得不在这种情况下以不同的方式处理路由-我的问题是我是否可以使确认代码只使用字母和数字。
[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();
}
routes.MapRoute(
    name: "Confirm",
    url: "confirm/{ID}/{*Code}",
    defaults: new { controller = "Account", action = "Confirm" });