Сценарий
У меня есть проект ASP.NET, который использует метод пользовательской авторизации/аутентификации (по сравнению с использованием проверки подлинности форм/окон и т.д.). На каждом безопасный загрузки страницы, то выполняется следующий код:Как перенаправить браузер во время обратной пересылки Async?
protected void Page_Load(Object sender, EventArgs e)
{
if (!IsLoggedIn)
{
HttpContext.Current.Response.Redirect("~/Login/", true);
}
}
Этот код в основном проверяет, является ли пользователь еще вошли в систему (не просроченного сеанса ASP.NET, не вошедшего вне, и т.д.); если пользователь не вошел в систему, происходит Response.Redirect()
, отправляя их на страницу входа.
Этот сценарий отлично работает, когда пользователь запрашивает полную страницу (по ссылке или по прямому URL). Проблема возникает при использовании async postback!
У меня есть кнопка, вложенная внутри <asp:UpdatePanel>
, которая вызывает асинхронные обратные вызовы при нажатии. Эта кнопка обновляет <asp:Label />
. Например:
<!-- the button -->
<asp:LinkButton ID="MyButton" CausesValidation="false" Text="My Button" OnClick="MyButton_Click" runat="server" />
<!-- the label -->
<asp:Label ID="MyLabel" runat="server" />
protected void MyButton_Click(Object sender, EventArgs e)
{
MyLabel.Text = DateTime.Now.ToString();
}
Вопрос
При асинхронной постбэк выполняется, и IsLoggedIn
ложно, то запрос перенаправляется на страницу входа в систему. Теперь ASP.NET Framework ожидает конкретного ответа (а не HTML-страницы); Таким образом, выбрасывая следующее сообщение об ошибке:
Вопрос
Как я могу решить эту проблему? Как я могу принудительно перенаправить всю страницу на определенный адрес из кода во время асинхронной обратной передачи?
Хотя ваш ответ - самый подходящий способ достижения желаемого результата, мне было нужно немного больше ** больше **; Мне нужно ** прерывать ** жизненный цикл страницы в текущем состоянии (как «Response.Redirect (« путь »,« истина »)». Я добавил дополнительный ответ, содержащий дополнительную информацию. – Jesse