Как заблокировать загрузки в.NET управление WebBrowser?

Очень простой, но хороший вопрос.

Давайте сделаем преобразования и найдем ответ

Шаг 1: Переместите предикат 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-
    1. Шаг 2: Преобразование 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
          )
      

      Глядя на эти выражения, мы видим, что:

      1. В общем случае это не может быть упрощено более
      2. В случае, когда все поля таблицы B определены с не NOT NULL - нижняя часть UNION ALL становится избыточной
    16
    задан Mohsen Nosratinia 8 May 2015 в 13:28
    поделиться

    1 ответ

    Вы могли использовать 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 к Вашему специальному прокси-серверу, который отфильтрует все небезопасные ответы от сети.

    3
    ответ дан 30 November 2019 в 23:27
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: