В настоящее время я работаю над проектом, и испытываю странную проблему, сгенерировать 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>
удалить. попробуйте это - var callbackUrl = Url.Action ("registerconfirmation", "account", new {Id = confirmToken}, протокол: Request.Url.Scheme); поэтому ваш url будет - http: // localhost: 8159/account/registerconfirmation? Id = fv9egt7cjoEGQvHfauiYE1A –
Это сделало это, спасибо! – josephzigler
добавлен как ответ, чтобы было ясно для других, не пропуская комментариев. –