Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

Перехват значений контроллера

У меня есть веб-приложение на ASP.NET. В одном месте в контроллере получаются данные. Еще есть desktop-приложение. В desktop-приложении есть компонент WebBrowser, на котором отображается копия страниц веб-приложения. То есть, например, у приложения на ASP.NET есть начальная страница, на которую можно попасть по адресу http://localhost/Main/Hello В desktop-приложении копия этой страницы отображается, если выполнить функцию
webbrowser.Navigate("http://localhost/Main/Hello");
Цель такая. В одно время в ASP.NET получаются данные, обрабатываются и передаются дальше. Мне нужно получить эти данные в desktop-приложении и запретить дальнейший переход "обрабатываются и передаются дальше". То есть, например:
public ActionResult Hello() { // Получаем данные, например в переменную Х string X = ...; // Обрабатываем // Пересылаем дальше Redirect(...); }
Я пробовал обработку и пересылку дальше перенести в другой контроллер, куда данные посылать GET-запросом, вроде так:
public ActionResult Hello() { // Получаем данные в переменную Х string X = ...; // Отправка переменной GET-запросом в другой контроллер string url = Url.Action("Priem", "Main", null, null, Request.Url.Host) + "?X=" + X; Redirect(url); }
public ActionResult Priem(string X) { // Приняли переменную и записали, например, в переменную Y string Y = X; // Обработка переменной Y Redirect(...); }
При работе веб-приложения всё работает нормально, данные пересылаются. Дальше я хочу в desktop-приложении нужно перехватить эту переменную Х. Для этого я на событие компонента webbrowser вешаю проверку
private void webBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e) { if (e.Url.AbsoluteUri.IndexOf("Priem") != -1) { e.Cancel = true; // Запрет дальнейшего перехода // Обработка переменной, полученной с Url } }
Но причина в том, что условие не выполняется, и такую ссылку оно не видит. Как мне тогда правильно это сделать или как по другому? webbrowser компонент должен обязательно быть. Заранее всем спасибо.


Ответ

Насколько я понял, вам нужно перехватить ссылку, по которой hello перенаправляет пользователя, и предотвратить переход по ней (так, чтобы priem на сервере не вызвался)? К сожалению, это нельзя сделать с помощью webbrowser contol - он не позволяет перехватывать ответ типа 302 redirect, который возвращает действие hello
Можете попробовать заменить стандартный WebBrowser на csEXWB, он позволяет просматривать заголовки ответа от сервера, и вы можете использовать это для предотвращения редиректа.
Аналог вашего запроса на английском SO:https://stackoverflow.com/questions/4019731/winforms-webbrowser-control-detect-redirections

Комментариев нет:

Отправить комментарий