asp.net-mvc пытается напечатать серверную часть, где контроллеру требуется авторизация - PullRequest
0 голосов
/ 21 января 2011

Я пытаюсь распечатать веб-страницу на принтере по умолчанию на веб-сервере.Я нашел Святой Грааль , и он работает, но печатает страницу входа в систему, а не целевую страницу, что имеет смысл, потому что контроллер требует авторизации, используя членство asp.net с настройкой запаса.Я нашел эту запись , где упоминается, что вы можете использовать интерфейсы DOM, если используете формы auth (думаю, это я), но я не уверен, как это сделать.Похоже, это позволит браузеру перейти на страницу входа в систему и опубликовать имя пользователя / пароль, чтобы, наконец, попасть на целевую страницу?Любое представление о том, как лучше поступить, было бы очень полезно, я бы не подумал, что это будет связано с печатью уже отрисованной страницы (хотя на стороне сервера печати это действительно имеет смысл).Спасибо!

Редактировать: Это работает: (очевидно, cookie - это то, что вы не можете установить в браузере. Навигация при вызове метода)

            HttpCookie cookie = Request.Cookies[".ASPXAUTH"];

            InternetSetCookie(htmlPath, ".ASPXAUTH", cookie.Value);

            browser.Navigate(htmlPath);
            while (browser.ReadyState != WebBrowserReadyState.Complete)
                Application.DoEvents();

            dynamic ie = browser.ActiveXInstance;
            ie.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, PRINT_WAITFORCOMPLETION);

и отдельно:

            [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
            static extern bool InternetSetCookie(string lpszUrl, string lpszCookieName, string lpszCookieData);

Это можно улучшить, используя ваш код, чтобы получать cookie-файл формы, а не по имени в качестве моего кода.

1 Ответ

0 голосов
/ 21 января 2011

Элемент управления WebBrowser имеет метод перегрузки Navigate , который позволяет передавать дополнительные HTTP-заголовки в запрос. В последнем аргументе вы можете передать заголовок cookie следующим образом:

browser.Navigate(htmlPath, null, null, "Cookie: authCookie=value" + Environment.NewLine);

, где, очевидно, вам необходимо заменить authCookie именем файла cookie аутентификации, ожидаемого вашим веб-сайтом, а value значением, полученным из файла cookie запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...