asp.net-mvc-4 – 带有绝对路径的ASP.NET MVC Bundle
发布时间:2020-12-16 03:28:20 所属栏目:asp.Net 来源:网络整理
导读:我在IIS上有虚拟目录,其中包含所有 javascript和css文件.是否可以使用Bundles将这些文件包含到ASP.NET MVC应用程序中. 我已经尝试过这样的事情: bundles.Add(new ScriptBundle("~/bundles/jquery").Include("/public/javascript/jquery-{version}.js")); 但
|
我在IIS上有虚拟目录,其中包含所有
javascript和css文件.是否可以使用Bundles将这些文件包含到ASP.NET MVC应用程序中.
我已经尝试过这样的事情: bundles.Add(new ScriptBundle("~/bundles/jquery").Include("/public/javascript/jquery-{version}.js"));
但得到了错误:
/ public / javascript是IIS上的虚拟目录. 解决方法
实际上Bundle类不支持绝对路径.我已经开了
a feature request here.
我用自定义VirtualPathProvider和控制器解决了这个问题.但这是非常脆弱的实施.您可以根据需要进行修改. public class ModuleScriptProvider : VirtualPathProvider
{
public static IBundleModule GetModulePath(string moduleName)
{
//return the absolute or relative path.
}
public static void ParseVirtualPath(string virtualPath,out string moduleName,out string path)
{
var parts = virtualPath.Replace("~/","").Split('/').Where(p => !string.IsNullOrEmpty(p)).Skip(1).ToList();
if (parts.Count < 2 || !virtualPath.EndsWith(".js"))
throw new FileNotFoundException("Script file doesn't found in the module script directory",virtualPath);
moduleName = parts.First(); // ~/ModuleScript/ModuleName/....
path = string.Join(@"",parts.Skip(1));
}
public static string MapPathMethod(string virtualPath)
{
if (IsModuleScriptPath(virtualPath))
{
string moduleName;
string path;
ParseVirtualPath(virtualPath,out moduleName,out path);
var moduleDir = GetModulePath(moduleName); //absolute path
if (!moduleDir.EndsWith(@""))
moduleDir += @"";
return moduleDir + path;
}
return HttpContext.Current.Server.MapPath(virtualPath);
}
public static bool IsModuleScriptPath(string virtualPath)
{
String checkPath = VirtualPathUtility.ToAppRelative(virtualPath);
return checkPath.StartsWith("~/ModuleScript/",StringComparison.InvariantCultureIgnoreCase);
}
public override bool FileExists(string virtualPath)
{
return (IsModuleScriptPath(virtualPath) || base.FileExists(virtualPath));
}
public override VirtualFile GetFile(string virtualPath)
{
if (IsModuleScriptPath(virtualPath))
return new ModuleScriptVirtualFile(virtualPath);
return base.GetFile(virtualPath);
}
public override CacheDependency GetCacheDependency(string virtualPath,System.Collections.IEnumerable virtualPathDependencies,DateTime utcStart)
{
if (IsModuleScriptPath(virtualPath))
{
string moduleName;
string path;
ParseVirtualPath(virtualPath,out path);
var bundleModulePath = GetModulePath(moduleName);
return new CacheDependency(bundleModulePath);
}
return base.GetCacheDependency(virtualPath,virtualPathDependencies,utcStart);
}
public override string CombineVirtualPaths(string basePath,string relativePath)
{
return base.CombineVirtualPaths(basePath,relativePath);
}
}
class ModuleScriptVirtualFile : VirtualFile
{
private readonly string _path;
private readonly string _moduleName;
public ModuleScriptVirtualFile(string virtualPath)
: base(virtualPath)
{
ModuleScriptProvider.ParseVirtualPath(virtualPath,out _moduleName,out _path);
}
public override Stream Open()
{
var moduleDir = ModuleScriptProvider.GetModulePath(_moduleName);
if (!moduleDir.EndsWith(@""))
moduleDir += @"";
return new FileStream(moduleDir + _path,FileMode.Open);
}
}
控制器: public class ModuleScriptController : Controller
{
public FileStreamResult GetFile(string path)
{
return new FileStreamResult(new ModuleScriptProvider().GetFile("~/ModuleScript/" + path).Open(),"text/javascript");
}
}
在Global.asax Application_Start方法中: HostingEnvironment.RegisterVirtualPathProvider(new ModuleScriptProvider()); BundleTable.EnableOptimizations = true; BundleTable.MapPathMethod = ModuleScriptProvider.MapPathMethod; 上帝的速度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 在typescript和knockout中使用viewmodel时的
- asp.net-mvc-3 – ASP.NET MVC 3编辑器模板中的IEnumerable
- asp.net – 我如何找出哪些服务器主机LDAP在我的Windows域上
- asp.net – IIS在编译的.net站点中查找.cs文件
- asp.net Gridview,1记录跨度两行
- 将ASP.NET updatepanel与jQuery UI DatePicker结合使用时出
- ASP.NET – Ajax Calendar Extender CSS继承自表
- asp.net – 内联代码不作为后面的代码执行
- asp.net – ‘txtName’未声明 由于其保护等级可能无法访问
- asp.net-mvc – 在MVC4中为ViewModel设置默认值的适当方法?
推荐文章
站长推荐
- asp.net – 在用户代码中未处理Assert faild异常
- asp.net – App_Offline.htm没有导致网站崩溃的可
- asp.net – 如何使用Inno Setup脚本创建IIS应用程
- asp.net-mvc-4 – 简单会员:用户的上次登录日期
- asp.net – 如何解决“Chunked body没有正确终止
- 模型 – 视图 – 控制器 – ASP.NET MVC:使用Se
- asp.net-web-api – 标题中的API密钥与swashbuck
- asp.net-mvc – 如何避免重复授权代码逻辑
- asp.net-mvc-3 – 无效的匿名类型成员声明符 必须
- 在asp.net中使用cookie mvc c#
热点阅读
