Надеюсь, это простой вопрос. Мне никогда не приходилось сталкиваться с этой проблемой и не знаю, как начать.HttpContext.Current.Session является нулевым на некоторых серверах
Я разработал веб-приложение, которое мои пользователи устанавливают и запускают на своем собственном веб-сервере.
Я реализовал функцию, позволяющую их пользователям изменять pw из pw по умолчанию. Это отлично работает практически на всех серверах. Однако у меня есть новый клиент, который не может его использовать.
Нынешний подход состоит из следующих этапов:
- пользователь входит в систему с умолчанию PW
- пользователя принимается к виду, где они должны создать новую ПВт (в противном случае их счета приостановлено)
- При успешном изменении pw пользователь выводится на главный экран.
Для большинства компаний это работает должным образом. Однако на этом сервере Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name)
всегда имеет значение null, поскольку Current
имеет значение null. Если я запустил приложение локально и подключился к их db, он работает так, как ожидалось. Но, если я запустил его на своих серверах (тот же код только на своем сервере подключен к тому же самому db), это значение равно null и сбой pw не выполняется.
Какую дополнительную информацию необходимо предоставить для справки по этой проблеме?
UPDATE: Вот код, я звоню: Скрипт вызывается при нажатии кнопки:
var $account = {
changePw: function (homeUrl, reset) {
$(".ui-widget").css("display", "none");
var newPw1 = $("#newPw1").val();
var newPw2 = $("#newPw2").val()
if (newPw1 != newPw2) {
$("#pwDontMatch").css("display", "block");
}
else {
var url = rootUrl + "Account/ChangePassword";
var data = {
oldPassword: $("#currPw").val(),
newPassword: $("#newPw1").val(),
reset: "false"
};
if (reset) {
data = { newPassword: $("#newPw1").val(), reset: "true", userId: $("#userIdTxt").val() };
}
$.ajax({
url: url,
data: data,
success: function (data) {
if (data.success != null && data.success == "true") {
$("#changeSuccess").css("display", "block");
setTimeout(function() { document.location.href = homeUrl; }, 3000);
}
else {
$("#error").css("display", "block");
if (data.error != null) {
$("#errMsg").html(data.error);
}
}
},
failure: function() {
$("#error").css("display", "block");
},
type: "POST"
});
}
}
};
И контроллер называется сценарием:
/// <summary>
/// This can be called from the change password page or the reset password page
/// </summary>
/// <param name="form"></param>
/// <returns></returns>
[HttpPost]
public JsonResult ChangePassword(FormCollection form)
{
JsonResult jr;
// ChangePassword will throw an exception rather
// than return false in certain failure scenarios.
try
{
bool changePasswordSucceeded;
MembershipUser currentUser = Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name, true /* userIsOnline */) ??
Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name);
if (currentUser != null)
{
try
{
changePasswordSucceeded = urrentUser.ChangePassword(form["oldPassword"], form["newPassword"]);
if (changePasswordSucceeded)
{
currentUser.IsApproved = true;
Membership.UpdateUser(currentUser);
if (currentUser.ProviderUserKey != null)
{
var mxUser = new MxUser(currentUser.ProviderUserKey.ToString());
Session["User"] = mxUser;
jr = Json(new {success = "true"});
}
else jr = Json(new {success = "false",error = "Cannot find ProviderUserKey."});
}
else jr = Json(new{success = "false",error = "Cannot update the user password."});
}
catch
{ jr = Json(new{success = "false",error = "Unexpected error in updating the user password."}); }
}
else jr = Json(new {success = "false", error = "Cannot find the user"});
}
catch (Exception ex)
{ jr = Json(new {success = "false", error = ex.Message}); }
return jr;
}
Если нет ничего, то, настройки, config и т. д., чтобы они могли измениться, чтобы это работало?
Единственная причина, я не знаю, почему ' HttpContext.Current' является нулевым во время запроса, использует '.ConfigureAwait (false)' для асинхронных операций ... Так как ваш образец строго синхронный, то u Вероятно, причина ... –
Где находится эта строка: 'Membership.GetUser (System.Web.HttpContext.Current.User.Identity.Name)'? – Win
Проверьте, работает ли приложение под соответствующими настройками (версия фреймворка, интегрированный режим и классический режим). – Stilgar