Если вы в порядке с использованием 28-мегабайтной библиотеки DLL, вы можете взглянуть на BerkeliumSharp , который представляет собой управляемую оболочку для потрясающей Berkelium библиотеки. Berkelium использует браузер Chromium по своей сути для предоставления закадрового рендеринга и делегированной модели обработки событий. Есть множество действительно крутых вещей, которые вы можете сделать с этим, но для вашей конкретной проблемы в Berkelium есть интерфейс, называемый ProtocolHandler. Назначение обработчика протокола - получить URL-адрес и предоставить заголовки и тело HTTP обратно в базовый механизм рендеринга.
В тестовом приложении BerkeliumSharp (один из проектов, доступных в исходном коде) вы можете увидеть одно конкретное использование этого FileProtocolHandler
- оно обрабатывает все файловые операции ввода-вывода для протокола «file: //» с использованием протокола .NET управляемые классы (System.IO). Вы можете сделать то же самое для составленного протокола, такого как «resource: //». На самом деле есть только один метод, который вы должны переопределить, называемый HandleRequest, который выглядит так:
bool HandleRequest (string url, ref byte[] responseBody, ref string[] responseHeaders)
Таким образом, вы бы взяли URL-адрес, например «resource: // path / to / my / html», и выполнили все необходимые Assembly.GetResourceStream и т. Д. В этом методе. Должно быть довольно легко взглянуть на то, как FileProtocolHandler используется для адаптации вашего собственного.
И Berkelium, и Berkelium Sharp являются открытым исходным кодом с лицензией BSD.