2016-04-29 6 views
1

В настоящее время я работаю над проектом, и испытываю странную проблему, сгенерировать CallBackURL, который входит в подтверждении по электронной почте, чтобы активировать зарегестрированы счета:callbackUrl меняется? с% 3f

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

Проблема в том, что ему генерирует этот адрес:

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

Как вы можете видеть, что это, кажется, заменить? с% 3f Я ожидаю, что это имеет какое-то отношение к кодировке html. Я пробовал добавить? к confirmToken, но это дало мне результат tesame.

В настоящее время я использую пакет ActionMailer, чтобы свести к минимуму мой код в моих контроллерах, при получении электронной почты он, похоже, не правильно декодирует callbackUrl, тогда как когда у меня была логика электронной почты непосредственно в моем регистре HttpPost, он декодировался отлично ,

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"); 
    } 

Email Вид:

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

удалить. попробуйте это - var callbackUrl = Url.Action ("registerconfirmation", "account", new {Id = confirmToken}, протокол: Request.Url.Scheme); поэтому ваш url будет - http: // localhost: 8159/account/registerconfirmation? Id = fv9egt7cjoEGQvHfauiYE1A –

+0

Это сделало это, спасибо! – josephzigler

+0

добавлен как ответ, чтобы было ясно для других, не пропуская комментариев. –

ответ

1

При использовании Url.Action("A","B",new{a="x"}), он автоматически создает строку запроса, как «/ B/A = х». Так что вам не нужно добавлять? отметьте там. Для получения дополнительной информации проверьте ссылку MSDN.

Смежные вопросы