Этот вопрос относится к Аутентификации с помощью ASP.NET Forms без перенаправления Только я не могу заставить его работать. MVC 2 изменил свои файлы сценариев, и теперь они получают, как указано здесь:
http://www.asp.net/ajaxlibrary/CDNAjax4.ashx
Сейчас я просто стреляю в темноте, но метод проб и ошибок сузил меня до включения
MicrosoftAjax.js
MicrosoftAjaxCore.js
MicrosoftAjaxComponentModel.js
MicrosoftAjaxSerialization.js
MicrosoftAjaxNetwork.js
MicrosoftAjaxWebServices.js
MicrosoftAjaxApplicationServices.debug.js
Проблема в том, что теперь я получаю исключение JavaScript:
Ошибка времени выполнения Microsoft JScript: Sys.InvalidOperationException: не указан путь к веб-службе.
Из поисков в поисках я обнаружил, что этот путь должен быть "~ / ScriptServices_AuthenticationService.asmx", но делать что-то вроде:
Sys.Services._AuthenticationService.DefaultWebServicePath = "~/ScriptServices_AuthenticationService.asmx";
не работает (я предполагаю, что это частный участник). Итак, вопрос, кто-нибудь знает, как заставить работать ajax / async FormsAuth? Есть ли исчерпывающее руководство по тому, от какого js-файла зависят различные службы MS Ajax? Наконец, если ничего из вышеперечисленного не существует, существует ли способ сделать FormsAuth на стороне сервера таким образом, чтобы он не перенаправлял (таким образом я могу просто вызвать действие контроллера с помощью формы ajax)? ... Я пытался использовать FormsAuthentication.SetAuthCookie (), но мне это не помогло.
Edit:
Я выяснил, что FormsAuthentication.SetAuthCookie () на самом деле работает, но требует закрытия потока ответов (когда, конечно, буфер отправляется и куки устанавливаются). Это не работает для меня, так как это слишком поздно для моих целей.
Edit:
Может понадобиться полное описание того, что я пытаюсь сделать. Форма ajax у меня есть для создания новой учетной записи. На стороне сервера я создаю учетную запись и вход в систему. В интерфейсе я жду события завершения ajax, а затем продвигаю форму мастера регистрации на следующую страницу, которая проходит через другие этапы регистрации. В псевдокоде действие контроллера выглядит так:
public JsonResult CreateAsync(LoginForm form)
{
CreateAccount(form);
FormsAuthentication.RedirectFromLoginPage(form.Email, false);
return Json(
new
{
Email = form.Email,
Name = form.Name,
Message = "Success"
});
}
Метод входа в систему завершает поток ответов, а затем клиентский Ajax запутывается. Вместо этого я попробовал FormsAuth.SetAuthCookie, но у меня есть проблемы, описанные выше.