Как очистить сессионную переменную по истечении таймера и перенаправить в другое представление? - PullRequest
0 голосов
/ 04 июня 2019

Я использую класс System.Timers.Timer.Логика заключается в том, чтобы запустить таймер через истекший через 5 минут.По истечении интервала (скажем, через 5 минут) я хочу очистить переменные сеанса, которые должны быть расположены, и перенаправить в другое представление.

Я знаю, что основной поток и прошедший интервал - это два разных потока, и поэтому я не могу получить доступ к сеансу.Но я связан с требованием очистить сессию и перенаправить на другое представление после этого интервала.

Я также думал об использовании функции тайм-аута JavaScript, но я подозреваю, что это не поможет мне, потому что мое приложение вызывает другой API (API шлюза платежей), и URL будет перенаправлен на их страницу URL.Поэтому, проверяя DOM, я вижу только содержимое их html-страниц, и мой контент появится позже, когда публикация моего URL-адреса с их сервера. (К этому времени таймер javascript уже исчезнет)

Мой код:

    public async Task<ActionResult> Index()
    { 
        TimerSessionForIssueTicket();
        return View();
    }

    public void TimerSessionForIssueTicket()
    {
        FlightBooking FlightBooking = new FlightBooking(); 

        if (Session["Timer"] == null)
            Session["Timer"] = new Timer();

        ((Timer)Session["Timer"]).Interval = FlightBooking.GetTicketBookingIssueTime((string)ConfigurationManager.AppSettings["TicketBookingWindowTotal"]);
        ((Timer)Session["Timer"]).Elapsed += OnTimedEvent;
        ((Timer)Session["Timer"]).AutoReset = false;
        ((Timer)Session["Timer"]).Enabled = true;
    }


    private void OnTimedEvent(object source, ElapsedEventArgs e)
    {            
        CancelBooking();
    }

    public ActionResult CancelBooking()
    {
        if (Session["Inbound"] != null) { Session.Remove("Inbound"); }
        return View("Index", home);
    }

По истечении таймера сеанс выдал исключение system.nullreference.Я удалил код для удаления сеанса, чтобы проверить перенаправление страницы, но не пришло сообщение об ошибке, и страница не перенаправила.

Как я могу исправить эту проблему?ИЛИ есть ли другие методы для выполнения этой задачи?Пожалуйста, предложите

1 Ответ

0 голосов
/ 05 июня 2019

Мой код будет примерно таким.Когда страница будет перенаправлена ​​на google.com, таймер не сработает.Является ли таймер запуска из JavaScript действительным?

<script type="text/javascript">    
var myVar; 
$(document).ready(function () { 
    myFunction();
    window.location.href = "https://www.google.com";
});

function myFunction() { 
    myVar = setTimeout(alertFunc, 6000);
}

function alertFunc() { 
    alert("Hello!");
}

...