Я поддерживать веб-сайт ASP.NET MVC, который используетЭмуляция ASP.NET аутентификации печенье
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
подписать пользователей в (они в конечном итоге с куки с именем .ASPXAUTH
).
Клиент хочет, чтобы я добавил функцию HTML в PDF, поэтому я обертываю библиотеку wkhtmltopdf и звоню. Это заканчивает тем, что команда, которая выглядит следующим образом:
wkhtmltopdf http://example.com/Foo/Edit/42 Foo.pdf
Однако, что приводит сделать PDF на экране входа в систему, так как агент пользователя wkhtmltopdf перенаправлен, так как он не имеет правильного печенья.
Это нормально, так как, в соответствии с документацией wkhtmltopdf, есть аргумент, как это:
--cookie <name> <value> Set an additional cookie (repeatable)
Так что я изменить команду, чтобы быть:
wkhtmltopdf --cookie .ASPXAUTH 91C0DE4C... http://example.com/Foo/Edit/42 Foo.pdf
Если значение куки извлекается с помощью Request.Cookie[".ASPXAUTH"].Value
,
К сожалению, это не работает, и я понятия не имею, почему. Я знаю, что ASP.NET получает файл cookie, потому что, когда я перехватываю страницу входа после перенаправления, я вижу, что она была установлена. Итак, почему ASP.NET не принимает мой скопированный файл cookie?
Вот содержание запроса, что позволяет ASP.NET (от Chrome):
GET http://localhost:50189/ReportingMonth/Edit/1193391 HTTP/1.1
Host: localhost:50189
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-CA,en;q=0.8,en-US;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: .ASPXAUTH=C8189041BF69FEF89A834B6F5035B786EC40145FFFBA3DBB6A04973BC58021C73D8D374E3577AA44BC26A784BC8A0C24831CF49FBD596BFFBA42C613E3C2C0C893D1587B7743D051643088BB8BAB667C047E0D1B84D7B76C4AADA7C62AB460D87C954BF9118BF5945E7D325D455CFD13A34C3DD5E597AFDF75D3C8EE76D8488B08ABBF6AE065B4C57CE47CB65AB17D65; language=en; ui-tabs-[object Object]=0
И вот один, что он перенаправляет на входе (от wkhtmltopdf):
GET http://localhost:50189/ReportingMonth/Edit/1193391 HTTP/1.1
Cookie: .ASPXAUTH=C8189041BF69FEF89A834B6F5035B786EC40145FFFBA3DBB6A04973BC58021C73D8D374E3577AA44BC26A784BC8A0C24831CF49FBD596BFFBA42C613E3C2C0C893D1587B7743D051643088BB8BAB667C047E0D1B84D7B76C4AADA7C62AB460D87C954BF9118BF5945E7D325D455CFD13A34C3DD5E597AFDF75D3C8EE76D8488B08ABBF6AE065B4C57CE47CB65AB17D65
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Qt/4.7.1 Safari/533.3
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Connection: Keep-Alive
Accept-Encoding: gzip
Accept-Language: en-US,*
Host: localhost:50189
Браузер дерьма в ASP.NET меня раздражает, не решайте вещи для браузера. Он должен обслуживать все точно так же, как закодирован в браузере, и пусть браузер задыхается, если этот браузер слишком глуп, и я не потратил усилий на устранение проблем на стороне клиента браузера. –
Мне жаль, что я не смог бы продвигать это более одного раза. Отлично сработано. –