Как правило, когда я не знаю тип, я не предоставляю один. Если вы чувствуете, что должны, и вообще не знаете, что это такое, ваш лучший выбор - Object
.
Если вы знаете его пару ключ-значение и все значения являются строками Object
.
Есть также более продвинутые типы, такие как @record
и @interface
, которые я оставлю в документации для описания.
Хотя не основной подход в ASP.NET, это очень возможно, с помощью конструкции, названной VirtualPathProvider
для ASP.NET. С ним можно служить содержанию веб-сайта из вещей, которые не являются файловой системой. Для одного примера Вы могли служить веб-сайту ASP.NET непосредственно из zip-файла, не разархивировав файлы к диску, сначала.
Вот загрузка, которая демонстрирует или иллюстрирует понятие, пользуясь библиотекой DotNetZip для помощи ASP.NET в вытаскивании содержания из zip.
Интересные биты кода:
using Ionic.Zip;
namespace Ionic.Zip.Web.VirtualPathProvider
{
public class ZipFileVirtualPathProvider : System.Web.Hosting.VirtualPathProvider
{
ZipFile _zipFile;
public ZipFileVirtualPathProvider (string zipFilename)
: base () {
_zipFile = ZipFile.Read(zipFilename);
}
~ZipFileVirtualPathProvider () {
_zipFile.Dispose ();
}
public override bool FileExists (string virtualPath)
{
string zipPath = Util.ConvertVirtualPathToZipPath (virtualPath, true);
ZipEntry zipEntry = _zipFile[zipPath];
if (zipEntry != null)
{
return !zipEntry.IsDirectory;
}
else
{
// Here you may want to return Previous.FileExists(virtualPath) instead of false
// if you want to give the previously registered provider a process to serve the file
return false;
}
}
public override bool DirectoryExists (string virtualDir)
{
string zipPath = Util.ConvertVirtualPathToZipPath (virtualDir, false);
ZipEntry zipEntry = _zipFile[zipPath];
if (zipEntry != null)
{
return zipEntry.IsDirectory;
}
else
{
// Here you may want to return Previous.DirectoryExists(virtualDir) instead of false
// if you want to give the previously registered provider a chance to process the directory
return false;
}
}
public override VirtualFile GetFile (string virtualPath) {
return new ZipVirtualFile (virtualPath, _zipFile);
}
public override VirtualDirectory GetDirectory (string virtualDir)
{
return new ZipVirtualDirectory (virtualDir, _zipFile);
}
public override string GetFileHash(string virtualPath, System.Collections.IEnumerable virtualPathDependencies)
{
return null;
}
public override System.Web.Caching.CacheDependency GetCacheDependency(String virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart)
{
return null;
}
}
}
VPP создают работы с ASP.NET 2.0 или позже, работы с любым веб-сайтом. Можно ли, конечно, адаптировать идею получить содержание от базы данных, CMS, или...??
Частью решения являются встроенные ресурсы . Это заботится обо всех статических файлах.
Частью решения является использование проекта веб-развертывания , компилирующего все страницы (то есть веб-сайт, который не обновляется) в единую сборку. Это позаботится обо всех файлах .cs.
Итак, в bin остается .dll, поддерживающая файлы .dll и файлы-заглушки .aspx. IIS по умолчанию хочет, чтобы файл aspx существовал до того, как он попытается передать его на сервер, отсюда и заглушка.
dll и файлы-заглушки .aspx. IIS по умолчанию хочет, чтобы файл aspx существовал до того, как он попытается передать его на сервер, отсюда и заглушка. dll и файлы-заглушки .aspx. IIS по умолчанию хочет, чтобы файл aspx существовал до того, как он попытается передать его на сервер, отсюда и заглушка.