Вы можете использовать отложенное намерение, получить ожидающее намерение для конструктора модели представления через фабрику, а затем использовать отложенное намерение с вызовом send of this
class LandingViewModelFactory extends ViewModelProvider.NewInstanceFactory {
PendingIntent pi;
public LandingViewModelFactory(PendingIntent pi){
super();
this.pi = pi;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) new LandingViewModel(pi);;
}
}
PendingIntent pi = PendingIntent.getActivity(context, recCode, intent, flag);
// get pi to view model constructor through factory
viewModel = ViewModelProviders.of(this, new LandingViewModelFactory(pi)).get(LandingViewModel.class)
//--------------------------------view model
public class LandingViewModel extends ViewModel {
PendingIntent pi;
public LandingViewModel(PendingIntent pi){
this.pi = pi;
}
// then call send in view model when you need to start activity
private void OnStartGame(final StartGameResponse startGameResponse) {
sessionKeyDao.save(new SessionKey(startGameResponse.getSessionId()));
pi.send();
}
public class DenyExpiredPasswordAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
IPrincipal user = filterContext.HttpContext.User;
if(user != null)
{
if (user.Identity.IsAuthenticated)
{
if (CurrentUser.PasswordExpired) // your checking of password expiration
{
filterContext.HttpContext.Response.Redirect("~/Account/ChangePassword?reason=expired");
}
}
}
base.OnAuthorization(filterContext);
}
}
это работает нормально, просто отметьте каждый контроллер этим атрибутом, исключите «Учетную запись». Таким образом, ни один пользователь с истекшим атрибутом не сможет продолжить работу до смены пароля.
Вы можете посмотреть на добавление обработчика событий PostAuthenticateRequest в global.asax.
protected void Application_Start(object sender, EventArgs e) {
this.PostAuthenticateRequest += new EventHandler(Global_PostAuthenticateRequest);
}
void Global_PostAuthenticateRequest(object sender, EventArgs e)
{
if (passwordExpired) {
Context.Response.Redirect("~/ChangePassword.aspx");
}
}