我有一个问题:我的网络安全总是在确认时抛出错误。我究竟做错了什么?这是我的验证操作(我已经调试过了,收到的 id 是正确的确认令牌:
public ActionResult Validate(String Id)
{
if (String.IsNullOrEmpty(Id))
{
return View();
}
bool b = WebSecurity.ConfirmAccount(Id);
if (b)
{
return View("ConfirmationSuccess");
}
return View("ConfirmationFailure");
}
这是我的注册操作:
public ActionResult Register(RegisterModel model, string ReturnUrl)
{
if (ModelState.IsValid)
{
// Попытка зарегистрировать пользователя
try
{
string confirmationToken = WebSecurity.CreateUserAndAccount(model.rEmail.ToLower(), model.rPassword, null, true);
dynamic email = new Email("~/Views/Emails/RegisterConfirmation.cshtml");
email.To = model.rEmail;
email.ConfirmationToken = confirmationToken;
email.Send();
return RedirectToAction("EmailValidation", new { Email = model.rEmail.ToLower() });
}
catch (MembershipCreateUserException e)
{
string field = string.Empty;
switch (e.StatusCode)
{
case MembershipCreateStatus.DuplicateUserName:
field = "rEmail";
break;
case MembershipCreateStatus.InvalidPassword:
field = "rPassword";
break;
default:
field = "RegisterForm";
break;
}
ModelState.AddModelError(field, ErrorCodeToString(e.StatusCode));
}
}
ViewBag.RegisterModel = model;
ViewBag.ReturnUrl = ReturnUrl;
ViewBag.LoginModel = new LoginModel();
//ModelState.AddModelError("rEmail", "Пользователь с таким e-mail уже зарегистрирован");
// Появление этого сообщения означает наличие ошибки; повторное отображение формы
return View("Login");
}
注册后发送电子邮件,链接是正确的链接,但是当它转到 WebSecurity.ConfirmAccount(Id) 时,它总是抛出 false....
感谢您的宝贵时间,并为我糟糕的英语感到抱歉。
UPD:在我的 IIS 服务器上有一个用于降低所有 url 的转换器。可能是这样,它比较区分大小写的键吗?我该如何解决这个问题?
UPD:好的,问题出在小写 url 上。WebSecurity.ConfirmAccount 区分大小写......我在我的操作中做了一些解决方法,以便我可以获得正确的 ConfitmtionToken,但这不是完全正确的方法,虽然我认为可能有两个相同的 ConfirmationToken.ToLower(),所以,请有人给我指出正确的方法。这是我的解决方法:
public ActionResult Validate(String Id)
{
if (String.IsNullOrEmpty(Id))
{
return View();
}
//bool b = WebSecurity.ConfirmAccount(Id);
using (var ctx = new DBContext())
{
Id = ctx.wpMembership.Where(s => s.ConfirmationToken.Equals(Id, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault().ConfirmationToken;
}
if (WebSecurity.ConfirmAccount(Id))
{
return View("ConfirmationSuccess");
}
return View("ConfirmationFailure");
}