Неподдерживаемая форма сжатия - PullRequest
1 голос
/ 19 января 2012

Я нахожусь в процессе написания собственного решения CMS для моего клиента, который генерирует файлы JavaScript на основе активного сайта

public ActionResult Javascript(string filename)
{
    var fileLocation = Server.MapPath(string.Format("~/Views/SiteFiles/{0}/js/{1}", Profile.SiteSlug, filename));
    if (!System.IO.File.Exists(fileLocation))
        fileLocation = Server.MapPath(string.Format("~/js/{0}", filename));

    return JavaScript(System.IO.File.ReadAllText(fileLocation));
}

По сути, он проверяет папку текущих сайтов, чтобы увидеть,Там есть файл Javascript, если его нет, он пытается загрузить его из корневой папки js, в то время как все URL-адреса выглядят так, как будто файлы находятся в одной папке

Вызов файла обычно работаетв первый раз, а иногда несколько раз, но случайно, ничего не меняя, я начинаю получать сообщение от Firefox enter image description here Chrome показывает это сообщение enter image description here Когда я пытаюсь декодировать Ответ от Fiddler, я получаю это сообщение enter image description here

Я действительно не понимаю, что происходит, и что мне нужно сделать, чтобы это исправить

Ответы [ 2 ]

1 голос
/ 19 января 2012

Я не совсем уверен, почему вы получаете ошибку кодирования / декодирования, но я работал в команде, в которой мы решили аналогичную проблему другим способом.

public ActionResult Index( string file, bool? compress )
{
    List< string > requestedFiles;
    if ( file == "documentation" )
    {
        var path = Server.MapPath( "~/Views/Javascript" );
        requestedFiles = Directory.GetFiles( path, "*.js" ).Select( x => Path.GetFileNameWithoutExtension( x ) ).ToList();
        return View( file, requestedFiles );
    }

    requestedFiles = file.Split( ',' ).Select( x => x.Trim() ).ToList();

    var javascript = new StringBuilder();
    foreach ( var filePath in requestedFiles )
    {
        using ( var fs = new FileStream( Path.Combine( Server.MapPath( "~/Views/Javascript" ), filePath + ".js" ), FileMode.Open ) )
        {
            var bytes = new byte[fs.Length];
            fs.Read( bytes, 0, bytes.Length );
            javascript.AppendLine( Encoding.UTF8.GetString( bytes ).Replace( "~/", FullyQulifiedPathToRoot() ) );
        }
    }

    var compressed = javascript.ToString();

    if ( !compress.HasValue || compress == true )
    {
        compressed = JavaScriptCompressor.Compress( javascript.ToString(), true, true, true, false, int.MaxValue, Encoding.UTF8, CultureInfo.CurrentCulture, false );
    }

    return JavaScript( compressed );
}

private string FullyQulifiedPathToRoot()
{
    return System.Web.HttpContext.Current.Request.Url.Scheme + "://" + System.Web.HttpContext.Current.Request.Url.Host + VirtualPathUtility.ToAbsolute( "~/" );
}

Это требует использования Yahoo.Yui.Compressor dll

0 голосов
/ 14 февраля 2012

Я закончил тем, что отключил статическое и динамическое сжатие контента на Сайте, это IIS, и он начал работать, не зная, почему он иногда сжимал его, а не другие, и все же буду углубляться в проблему, когда у меня будет время

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...