2016-04-29 8 views
1

Ich bin derzeit an einem Projekt arbeiten und ein seltsames Problem auftreten, erzeugen ich eine callbackUrl, die in die Bestätigungs-Email, um das registrierte Konto zu aktivieren geht:callbackUrl ändert? mit% 3f

var callbackUrl = Url.Action("registerconfirmation", "account", new { Id = "?" + confirmationToken }, protocol: Request.Url.Scheme); 

Das Problem, dass es diese uRL generiert:

http://localhost:8159/account/registerconfirmation/%3fv9egt7cjoEGQvHfauiYE1A

Wie Sie sehen es die zu ersetzen scheint? mit% 3f Ich erwarte, dass dies etwas mit HTML-Codierung zu tun hat. Ich habe versucht, die? zur bestätigungToken aber das gab mir tesaame ergebnis.

Ich verwende derzeit das ActionMailer-Paket, um meinen Code in meinen Controllern zu minimieren, beim Empfangen der E-Mail scheint es die callbackUrl nicht richtig zu entschlüsseln, während ich die E-Mail-Logik direkt in meinem Register HttpPost entschlüsselt hatte .

EmailController:

public class EmailController : MailerBase 
    { 
       public EmailResult ConfirmationEmail(Register model, string callbackUrl) 
       { 
        From = "[email protected]"; 
        To.Add(model.Email); 
        Subject = ("Email Confirmation"); 
        ViewBag.Url = callbackUrl; 
        return Email("ConfirmationMessage", model); 
       } 
    } 

RegisterController:

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Register(Register model) 
    { 
     string confirmationToken = CreateGuid(); 
     Account account = new Account(model.Username, model.Password, model.FirstName, model.LastName, model.Email, false, confirmationToken); 
     Session["accountID"] = Repository.InsertAccount(new Account(model.Username, model.Password, model.FirstName, model.LastName, model.Email, false, confirmationToken)); 
     var callbackUrl = Url.Action("registerconfirmation", "account", new { Id = "?" + confirmationToken }, protocol: Request.Url.Scheme); 
     try 
     { 
      new EmailController().ConfirmationEmail(model, callbackUrl).Deliver(); 
     } 
     catch (Exception e) 
     { 
      ModelState.AddModelError("ConfirmationMailFailed", "Problem sending email" + e.Message); 
     } 
     return View("emailconfirmation"); 
    } 

E-Mail ansehen:

<p>To get started, please click <a href="@ViewBag.Url">here</a> to activate your account.</p> 
+2

entfernen. versuch das - var callbackUrl = Url.Action ("registerconfirmation", "account", neu {Id = confirmationToken}, protocol: Request.Url.Scheme); also wäre Ihre URL - http: // localhost: 8159/account/registerbestätigung? Id = fv9egt7cjoEGQvHfauiYE1A –

+0

Das ist es, danke! – josephzigler

+0

hinzugefügt als Antwort, so dass es für andere klar wäre, ohne durch Kommentare zu gehen. –

Antwort

1

Wenn Sie Url.Action("A","B",new{a="x"}) verwenden, erstellt es automatisch die Abfragezeichenfolgeflag wie „/ B/A ein = x ". Sie müssen also nicht hinzufügen? markieren Sie dort. Für weitere relevante Informationen überprüfen Sie die MSDN Referenz.

Verwandte Themen