Что происходит с контроллером ASP.NET MVC, когда пользователь перемещается до получения ответа?

У меня есть действие AJAX, которое может занять пару минут, в зависимости от объема данных. Если пользователь получает разочарование и перемещается, пока это действие все еще работает, что происходит с контроллером? Все равно завершается? Знает ли он, что запрос должен быть оставлен и утилизировать объект контроллера?

Ответ 1

Он не отменяет запрос на сервер, поскольку действие навигации не отправляет на сервер информацию о данном запросе. Клиент (браузер), однако, перестанет его слушать. После завершения запроса, независимо от того, слушал ли клиент его или нет, контроллер будет распоряжаться, как обычно.

С учетом сказанного вы можете получить фантазию и использовать комбинацию прослушивания изменения страницы на стороне клиента и вызов abort по запросу AJAX на сервер.

Этот вопрос SO обсуждает, как прервать запрос. Я мог бы представить настройку переменной при первом запуске запроса AJAX, а затем отключить ее, когда она закончится.

Предупреждение - псевдо-код ниже

var isProcessing = false;

var xhr = $.ajax({
    type: "POST",
    url: "myUrl",
    beforeSend: function(){
       isProcessing = true;
    }
    complete: function(){
       isProcessing = false;
    }
});

window.onbeforeunload = function(){
   if(isProcessing){
       xhr.abort();
   }
}

Вышеприведенная концепция является основной идеей, но, вероятно, есть некоторые проверки, если объект xhr существует, возможно, также связывает/отвязывает window.onbeforeunload в обработчиках beforeSend и complete для элемента .ajax().