![](/img/trans.png)
[英]How can I restrict the file type in the file browse menu of an AsyncFileUpload in the ASP.NET AJAX Control Toolkit
[英]Can I get “WAR file” type deployment with ASP.NET?
有时精通 J2EE 的人看着 ASP.NET 并想知道,将应用程序部署为单个单元的支持在哪里? JSP/Servlet 应用程序可以部署为 WAR 文件,所有页面、内容、元数据和代码都在一个存档中。 战争文件可以进行版本控制,轻松移动。 可以保证整个应用程序包含在一个单元中。
这不是 ASP.NET 的主流方法。 人们做什么? 他们是否求助于复制目录和所有无数文件? 这对 ASP.NET 开发人员来说不是问题吗?
(这有点作弊,因为我会建议我自己的答案)
虽然不是 ASP.NET 中的主流方法,但这很有可能,使用 ASP.NET 的VirtualPathProvider
构造。 有了它,您可以从非文件系统的东西中提供网站内容。 例如,您可以直接从 ZIP 文件中提供 ASP.NET 网站,而无需先将文件解压缩到磁盘。
这是一个演示或说明该概念的下载,它使用 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 或...中获取内容??
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.