Я пытаюсь распечатать веб-страницу на принтере по умолчанию на веб-сервере. Я нашел the holy grail, и он работает, но печатает страницу входа не на целевую страницу, что имеет смысл, потому что контроллер требует авторизации с использованием членства asp.net с настройкой запаса. Я нашел this writeup, где упоминается, что вы можете использовать dom-интерфейсы, если используете формы auth (подумайте, что это я), но я не уверен, как это сделать. Похоже, это позволит браузеру перейти на страницу входа и отправить имя пользователя/пароль обратно, чтобы, наконец, попасть на целевую страницу? Любое понимание наилучшего способа продолжения было бы очень полезно, я бы не подумал, что это будет связано с печатью страницы, которая уже отображена (хотя серверная часть печати имеет смысл). Благодаря!asp.net-mvc пытается распечатать серверную сторону, где контроллер требует авторизации
Edit: Это работает: (по-видимому, печенье это одна вещь, которую вы не можете установить в вызове метода browser.Navigate)
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 специально, а не по имени в качестве моего кода.
Спасибо! Я должен был там посмотреть. Я близок, я думаю, но все еще получаю логин, см. Мое редактирование. –
пробовали различные вещи, включая добавление обоих файлов cookie в строку, но когда я смотрю на своих локалей, cookie документа cookie по-прежнему остается нулевым. любая идея, чего не хватает? Спасибо –
@Vince, почему вы используете секцию sessionState, чтобы прочитать имя файла cookie? Здесь мы говорим об аутентификации. Не сеанс. Это не одно и то же. Сделайте это вместо этого: 'Request.Cookies [FormsAuthentication.FormsCookieName]'. –