Я хочу управлять своим AUTH печеньем, аналогичных http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/Asp.Net MVC - доступ к IoC контейнера из session_start
Я хотел бы, чтобы проверить кук на начале сеанса аутентификации пользователя, если есть один и обменять его на новый в начале каждого нового сеанса. Я также хотел бы создать один, если он не существует.
Это должно позаботиться о функциональности типа «помнить меня» - подобно тому, как работает SO.
Для этого мне нужно иметь возможность извлекать службы из контейнера из метода Session_Start в global.asax. При отладке приложения я выполняю метод Application_Start, где сконструирован контейнер. Все идет хорошо, и создается свойство Container для global.asax. Но когда я вхожу в Session_Start, Контейнер имеет значение NULL.
Есть ли что-то, что я не знаю? Есть ли лучший способ сделать это?
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
Container = new WindsorContainer().AddFacility<WcfFacility>()
.Install(Configuration.FromXmlFile("Configuration\\Windsor.config"))
.Install(FromAssembly.InDirectory(new AssemblyFilter(HttpRuntime.BinDirectory, "SonaTribe*.dll")));
}
/// <summary>
/// See http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Session_Start(object sender, EventArgs e)
{
if (Container != null)
{
var accountService = Container.Resolve<IAccountService>();
var logger = Container.Resolve<ILogger>();
var forms = Container.Resolve<IFormsAuthentication>();
// if there is a cookie
if (Context.Request.Cookies["user-id"] != null)
{
try
{
//get the new cookie key from the server
var newUserSessionResponse = accountService.RegisterNewUserSession(new RegisterNewUserSessionRequest
{
SessionId = Context.Request.Cookies["user-id"].Value
});
if (newUserSessionResponse.Success)
{
//do something
}
else
{
logger.Info("Failed attaching the user to the session", newUserSessionResponse.Message);
}
}
catch (Exception exc)
{
logger.Error("Failed attaching the user to the session", exc);
}
}
else
{
//new user:
//do things
}
}
}
Благодаря
ш: //
Какой * контейнер * вы используете? – 2010-11-25 18:09:33
Добавьте источник, который поможет нам понять, что вы делаете в этих методах. – 2010-11-25 18:12:24