У меня есть приложение, которое имеет несколько проектов на С#, как показано ниже
- CRM.DomainLogic
- CRM.Web
- Warehouse.DomainLogic
- Warehouse.Web
- ...
Каждый проект web, такой как CRM.Web, имеет свои собственные "html views" и "js-контроллеры", и есть несколько других типов статических файлов.
Чтобы упростить развертывание, я хотел бы использовать манифест Html5.
Итак, чтобы сделать раздельное развертывание по возможным проектам, я использовал iframes. В результате с изменениями CRM.Web клиенты получат CRM файлы, и нет необходимости снова загружать файлы Warehouse.Web!
Шаги:
1- У меня есть метод Web API, который возвращает все имена веб-сборок, например CRM.Web и Warehouse.Web
2- У меня есть другой метод Web API, который получает имя сборки как параметр и возвращает содержимое файла манифеста, указывающее на файлы, которые находятся в этом проекте.
public HttpResponseMessage GetManifestByAssemblyName(String assemblyName)
Коды здесь опущены.
response.Content = new StringContent(manifestBody.ToString(), Encoding.UTF8, "text/cache-manifest");
3 на стороне клиента. Я создаю новый iFrame для каждой сборки и устанавливаю src в другой метод web api, который возвращает тело html, которое он манифест назначается адресу WebAPI-метода, который возвращает тело манифеста (GetManifestByAssemblyName)
String result = String.Format
(@"<html manifest='{0}'> </html>", "/api/AppManifest/GetManifestByAssemblyName?assemblyName=" + assemblyName + ".manifest");
response.Content = new StringContent(result, UTF8Encoding.Default, "text/html");
Код iFrames:
var htmlPageUrl = "/api/AppManifest/GetHtmlContainerForManifestByName?assemblyName=" + name;
var iFrame = document.createElement("iFrame");
iFrame.setAttribute("src", htmlPageUrl);
iFrame.setAttribute("sandbox", "allow-same-origin");
iFrame.setAttribute("seamless", "seamless");
document.body.appendChild(iFrame);
Когда я запускаю приложение, он получает имена сборки, а затем создает iFrames, и каждый iFrame автоматически получает свой манифест.
Но window.applicatioCache.status равно 0, что означает отсутствие кеша.
Когда я перехожу на страницу ресурсов, я вижу следующее:
Но когда я запрашиваю один из тех файлов, которые кэшируются, запрос не будет использовать кеш.
Я знаю, что нет ссылок на мою работу в Интернете, и это полностью основано на моих идеях, и я знаю, что некоторые ограничения безопасности могут появляться здесь, но есть ли какие-либо решения для решения проблемы?
Спасибо заранее.
Примечание: Здесь можно скачать примерный исходный код приложения.
Затем нажмите Ctrl + S, чтобы сохранить файл, и сначала прочитайте заметки Index.html.