2017-05-28 48 views
2

我已经覆盖了函数GetVirtualFileSources()如下面的链接表示,但我不压缩文件:https://github.com/ServiceStack/ServiceStack/wiki/HTML,-CSS-and-JavaScript-Minification#minify-dynamic-razor-viewsServiceStack缩小

请有助于理解这个问题。

预先感谢您!

enter image description here

编辑

GetVirtualFileSources()精缩文件,并添加内存文件系统,但是当我提出要求http://myshost/style.css我得到的原始文件。

如何使后端返回最小化的文件。

它requet原料:

GET /content/style.css HTTP/1.1 
Host: localhost:61923 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 
Accept: text/css,*/*;q=0.1 
Referer: http://localhost:61923/ 
Accept-Encoding: gzip, deflate, sdch, br 
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 
Cookie: ss-pid=1BFULq391BqiGZ4dwj3Z; X-UAId=2; com.cloudloto.lang=ru; ss-id=GaurYdBT7yDywtF3JTiM 

EDIT 2

性反应的原料:

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: text/css 
Last-Modified: Sat, 27 May 2017 23:22:08 GMT 
Accept-Ranges: bytes 
Vary: Accept 
Server: Microsoft-IIS/10.0 
X-Powered-By: ServiceStack/4,58 Win32NT/.NET 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS 
Access-Control-Allow-Headers: Content-Type 
Access-Control-Allow-Credentials: true 
X-Startup-Errors: 1 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?ZDpcRG9jdW1lbnRzXExvdG9UZWFtXGxvdG9cbG90b1xsb3RvXGNvbnRlbnRcc3R5bGUuY3Nz?= 
X-Powered-By: ASP.NET 
Date: Sun, 28 May 2017 20:55:01 GMT 
Content-Length: 50176 

我重视的文件,而不是直接由虚拟路径:

<link href="/content/style.css" rel="stylesheet" /> 

文件只是最小化,其余我作为文档。

enter image description here

public override List<IVirtualPathProvider> GetVirtualFileSources() { 
      var existingProviders = base.GetVirtualFileSources(); 
      var memFs = new InMemoryVirtualPathProvider(this); 

      var fs = existingProviders.First(x => x is FileSystemVirtualPathProvider); 

      foreach (var file in fs.GetAllMatchingFiles("*.html")) { 
       var contents = Minifiers.HtmlAdvanced.Compress(file.ReadAllText()); 
       memFs.AddFile(file.VirtualPath, contents); 
      } 

      foreach (var file in fs.GetAllMatchingFiles("*.css") 
       .Where(file => !file.VirtualPath.EndsWith(".min.css"))) //ignore pre-minified .css 
      { 
       var contents = Minifiers.Css.Compress(file.ReadAllText()); 
       memFs.AddFile(file.VirtualPath, contents); 
      } 

      foreach (var file in fs.GetAllMatchingFiles("*.js") 
       .Where(file => !file.VirtualPath.EndsWith(".min.js"))) //ignore pre-minified .js 
      { 
       try { 
        var js = file.ReadAllText(); 
        var contents = Minifiers.JavaScript.Compress(js); 
        memFs.AddFile(file.VirtualPath, contents); 
       } catch (Exception ex) { 
        base.OnStartupException(new Exception("JSMin Error {0}: {1}".Fmt(file.VirtualPath, ex.Message))); 
       } 
      } 

      existingProviders.Insert(0, memFs); 
      return existingProviders; 
     } 

感谢。

+0

您尚未提供任何可帮助确定问题的信息。请始终显示您在问题中使用的impl。首先调试您的自定义GetVirtualFileSources()impl以确认此.css文件正被缩小并添加到Memory Filesystem中,请注意VirtualPath然后直接从Chrome请求该css文件以验证它是否缩小,请显示HTTP请求只有在WebInspector中,源视图可能会自动格式化。 – mythz

+0

还请包括原始HTTP响应头。你的网址也是'http:// myshost/style.css',但你的HTTP请求表明它的请求'/ content/style.css'。请指定未被缩小的确切虚拟路径,并确认是否缩小了确切的文件并将其添加到'GetVirtualFileSources()'中的memFs中。 – mythz

+0

我假设您向我展示的调试输出是针对具有VirtualPath“/content/style.css”的文件?响应也由ServiceStack提供,所以它应该工作,因为ServiceStack使用VirtualFileSource来源静态文件,除非你有一些其他的配置干扰它,但我不能从这里告诉,因为它的工作正常。你可以在我的答案中尝试服务实现,并让我知道返回的文件是缩小版本吗? – mythz

回答

0

问题是由于请求错案在您的要求content/style.css那是那是在InMemoryVirtualPathProvider“内容/ style.css中补充说:”不同的情况。

为了帮助尝试创建一种服务,从VirtualFileSources返回文件,e.g诊断静态文件的问题:

[Route("/files/{Path*}")] 
public class DownloadFile 
{ 
    public string Path { get; set; ] 
} 

public object Any(DownloadFile request) 
{ 
    var file = VirtualFileSources.GetFile(request.Path); 
    return new HttpResult(file); 
} 

然后调用这个服务与路由/files/content/style.css,看看它的返回缩小的文件。如果它不知道什么类型的file是。

+0

我试过了。返回非最小化文件:( –

+0

@MherArsh和'file'的类型是什么? – mythz

+0

类型是css:[http://prntscr.com/fd5zzb](http://prntscr.com/fd5zzb) –