Очень простой, но хороший вопрос.
Давайте сделаем преобразования и найдем ответ
WHERE
на B.y
в JOIN
-классу SELECT
A.*
FROM
A
LEFT JOIN B ON A.x == B.x
AND B.y IS NOT NULL
WHERE
A.z == "Hola";
Теперь мы можем:
[ 1119]LEFT JOIN
в UNION ALL
из выражений JOIN-
и NOT EXISTS-
LEFT JOIN
-> JOIN
+ NOT EXISTS
SELECT A.*
FROM A
JOIN B ON A.x == B.x
AND B.y IS NOT NULL
WHERE
A.z == "Hola"
UNION ALL
SELECT A.*
FROM A
WHERE
A.z == "Hola"
AND NOT EXISTS(
SELECT * FROM B
WHERE A.x = B.x
AND B.y IS NOT NULL
)
Глядя на эти выражения, мы видим, что:
NOT NULL
- нижняя часть UNION ALL
становится избыточной Вы могли использовать Navigating
событие, которое позволяет отмену.
В этом событии, Вы могли попытаться соединиться с URL, по этому перемещаются сами, осмотрите http заголовки ответа и навигацию отмены, если несоответствующий ContentType обнаруживается.
System.Net.WebRequest request = System.Net.WebRequest.Create(e.Url);
// we need only header part of http response
request.Method = "HEAD";
System.Net.WebResponse response = request.GetResponse();
// only text/html, text/xml, text/plain are allowed... extend as required
if (!response.ContentType.StartsWith("text/"))
{
e.Cancel = true;
MessageBox.Show("Not allowed for security resons...");
}
Очевидно, это не пуленепробиваемое решение, но может дать Вам общее представление, как начать (если Вы не возражаете против дополнительного крошечного распространения в прямом и обратном направлениях только для получения http заголовков ответа).
Jens Bannmann записал:
Это не идеально, поскольку я имею дело с веб-приложениями, где дополнительный запрос мог бы инициировать действие, выполняемое дважды :-(
Затем я создал бы некоторый простой прокси-сервер, который осмотрит все полученные данные и отфильтровал бы все http ответы, которые могли инициировать диалоговое окно "Сохранить Как" в Вашем управлении веб-браузера.
Просто, не позволяйте своему веб-браузеру управлять, непосредственно получают доступ к Интернету, но делегируют все запросы HTTP к Вашему специальному прокси-серверу, который отфильтрует все небезопасные ответы от сети.