У меня есть веб-приложение на 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
Комментариев нет:
Отправить комментарий