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#
热点阅读