在静态页中,js和css使用虚拟路径指向网站根目录
第一步:修改web.config
<configuration> <system.webServer> <handlers> <add name="x" verb="GET" path="*.css.ashx" type="FileResolver" /> <add name="xx" verb="GET" path="*.js.ashx" type="FileResolver" /> </handlers> </system.webServer> </configuration>
第二步:添加以下代码:
using System; using System.IO; using System.Web; public class FileResolver : IHttpHandler { #pragma warning disable private struct FileCacheItem { public FileCacheItem(string content) { Content = content; } public string Content { get; } public DateTime DateEntered { get; } = DateTime.Now; } #pragma warning restore private FileCacheItem UpdateFileCache(HttpContext context, string path) { using var f = new FileStream(path, FileMode.Open, FileAccess.Read); using var r = new StreamReader(f); var content = r.ReadToEnd(); r.Close(); f.Close(); var root = HttpRuntime.AppDomainAppVirtualPath; if (!root.EndsWith("/")) { root += "/"; } content = content.Replace("~/", root); FileCacheItem item = new(content); context.Cache.Insert(path, item, new(path)); return item; } public void ProcessRequest(HttpContext context) { var path = context.Request.PhysicalPath.Replace(".ashx", ""); if (path.Contains("~\\")) { path = path.Replace("~", "").Replace("\\\\", "\\"); } var res = context.Response; if (!File.Exists(path)) { res.StatusCode = 404; return; } context.Cache.Get(path); res.ContentType = "text/" + GetContentType(Path.GetExtension(path)); var cache = (FileCacheItem)(context.Cache[path] ?? UpdateFileCache(context, path)); res.Write(cache.Content); res.End(); } private string GetContentType(string ext) => ext.ToLower() switch { ".css" => "css", ".xml" => "xml", ".js" => "javascript", _ => "plain", }; public bool IsReusable => true; }
第三步:添加以下代码
<script src="~/Scripts/jquery-1.8.0.min.js.ashx"></script>
转自:Using the FileResolver to allow virtual application paths ( ~ ) in any file - CodeProject