de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 Anders
Anders
Question

CssRewriteUrlTransform dengan atau tanpa virtual directory

Kami menggunakan MVC Bundling di situs kami, CssRewriteUrlTransform memastikan bahwa url gambar kerja dari dynamic bundel file css.

Tapi ini hanya bekerja ketika tidak menggunakan direktori virtual, saya.e

http://localhost/VirttualDir tidak bekerja, namun http://localhost/ tidak. Hal ini karena CssRewriteUrlTransform transform tidak mengambil virtual folder ke account user ketika menulis ulang url. Jadi, jika sebuah gambar real path localhost/vdir/konten/img/foo.png ini akan menulis ulang ke localhost/konten/img/foo.png yang salah

61 2013-11-04T09:57:00+00:00 4
 marc_s
marc_s
Pertanyaan edit 4 November 2013 в 10:12
Pemrograman
c#
asp.net-mvc-4
bundling-and-minification
web-optimization
Solution / Answer
 BernardG
BernardG
4 November 2013 в 10:06
2013-11-04T10:06:08+00:00
Lebih
Sumber
Sunting
#22706441

Saya tidak yakin sepenuhnya memahami masalah anda, tapi melihat http://localhost di sini tampaknya salah. Anda tidak harus menggunakan URL absolut untuk bundel anda.

Bagi saya CssRewriteUrlTransform bekerja dengan sempurna, berikut adalah cara yang saya gunakan ini:

bundles.Add(new StyleBundle("~/bundles/css").Include(
                "~/Content/css/*.css", new CssRewriteUrlTransform()));

"Bundel" adalah virtual.

Apakah ini bisa membantu?

Update

Saya bingung dengan "VirtualDir" hal, karena anda berbicara tentang IIS VirtualDir, dan aku berpikir Bundel VirtualDir! It's benar bahwa dalam hal ini CssRewriteUrlTransform akan menulis ulang Url untuk Tuan rumah, bukan untuk Host/VirtualDir URI.

Untuk melakukan itu, anda harus memperoleh CssRewriteUrlTransform untuk membuatnya melakukan apa yang anda butuhkan untuk. Ada diskusi yang baik berikut ini: https://stackoverflow.com/questions/12577108/asp-net-mvc4-bundling-with-twitter-bootstrap?rq=1

Tampaknya jawaban terbaik adalah ada:http://aspnetoptimization.codeplex.com/workitem/83

public class CssRewriteUrlTransformWrapper : IItemTransform
{
    public string Process(string includedVirtualPath, string input)
    {           
        return new CssRewriteUrlTransform().Process("~" + VirtualPathUtility.ToAbsolute(includedVirtualPath), input);           
    }
}

Menggunakan kelas ini bukan CssRewriteUrlTransform

 Community
Community
Jawaban edit 23 Mei 2017 в 12:25
93
0
 Vilx-
Vilx-
4 November 2013 в 10:16
2013-11-04T10:16:37+00:00
Lebih
Sumber
Sunting
#22706443

Aku punya masalah yang sama. Ini adalah bagaimana saya tetap itu:

private class ProperUrlRewrite : IItemTransform
{
    private static string RebaseUrlToAbsolute(string baseUrl, string url)
    {
        if (string.IsNullOrWhiteSpace(url) || string.IsNullOrWhiteSpace(baseUrl) || url.StartsWith("/", StringComparison.OrdinalIgnoreCase) || url.Contains(':'))
            return url;
        return VirtualPathUtility.Combine(baseUrl, url);
    }
    private static Regex UrlPattern = new Regex("url\\s*\\(['\"]?(?<url>[^)]+?)['\"]?\\)");
    public string Process(string includedVirtualPath, string input)
    {
        if (includedVirtualPath == null)
            throw new ArgumentNullException("includedVirtualPath");
        if (string.IsNullOrWhiteSpace(input))
            return input;

        string directory = VirtualPathUtility.GetDirectory(VirtualPathUtility.ToAbsolute(includedVirtualPath));
        if (!directory.EndsWith("/", StringComparison.OrdinalIgnoreCase))
            directory += "/";
        return UrlPattern.Replace(input, match => "url(" + ProperUrlRewrite.RebaseUrlToAbsolute(directory, match.Groups["url"].Value) + ")");
    }
}

Aku tahu itu's jauh dari sempurna, dan ada banyak dari edge kasus-kasus di mana hal ini bisa salah (saya'm tidak yakin anda dapat mengurai file CSS dengan regex di tempat pertama - meskipun ini adalah persis apa yang asli CssRewriteUrlTransform tidak), tapi sejauh ini memegang...

5
0
Phan  Đức Bình
Phan Đức Bình
20 April 2015 в 7:42
2015-04-20T07:42:58+00:00
Lebih
Sumber
Sunting
#22706444

The 'CssRewriteUrlTransform' bekerja dengan baik untuk aplikasi yang DOESN'T berjalan di atas virtual directory.

Jadi, jika aplikasi anda berjalan pada http://your-site.com/ berjalan baik-baik saja, tetapi jika berjalan pada http://your-site.com/your-app/ kau'll memiliki 404 untuk semua gambar anda, karena default 'CssFixRewriteUrlTransform' adalah referensi gambar anda dengan '/'.

Gunakan ini:

public class CssFixRewriteUrlTransform: IItemTransform {

    private static string ConvertUrlsToAbsolute(string baseUrl, string content) {
        if (string.IsNullOrWhiteSpace(content)) {
            return content;
        }
        var regex = new Regex("url\\(['\"]?(?<url>[^)]+?)['\"]?\\)");
        return regex.Replace(content, match = > string.Concat("url(", RebaseUrlToAbsolute(baseUrl, match.Groups["url"].Value), ")"));
    }

    public string Process(string includedVirtualPath, string input) {
        if (includedVirtualPath == null) {
            throw new ArgumentNullException("includedVirtualPath");
        }
        var directory = VirtualPathUtility.GetDirectory(includedVirtualPath);
        return ConvertUrlsToAbsolute(directory, input);
    }

    private static string RebaseUrlToAbsolute(string baseUrl, string url) {
        if (string.IsNullOrWhiteSpace(url) || string.IsNullOrWhiteSpace(baseUrl) || url.StartsWith("/", StringComparison.OrdinalIgnoreCase)) {
            return url;
        }
        if (!baseUrl.EndsWith("/", StringComparison.OrdinalIgnoreCase)) {
            baseUrl = string.Concat(baseUrl, "/");
        }
        return VirtualPathUtility.ToAbsolute(string.Concat(baseUrl, url));
    }
}

Catatan: hapus semua file css dengan .min.css, karena jika don't itu doesn't fix.

Snake Eyes
Snake Eyes
Jawaban edit 15 Juni 2015 в 10:47
5
0
 Chrisdreams13
Chrisdreams13
10 Agustus 2016 в 3:03
2016-08-10T15:03:58+00:00
Lebih
Sumber
Sunting
#22706445

Saya memiliki masalah dengan url yang berisi "data" dan bahkan url batin satu sama lain, jadi aku harus kembali melakukan regex, ini adalah solusi saya:

public string Process(string includedVirtualPath, string input)
    {
        if (includedVirtualPath == null)
        {
            throw new ArgumentNullException(nameof(includedVirtualPath));
        }

        if (string.IsNullOrWhiteSpace(input))
        {
            return input;
        }

        var directory = VirtualPathUtility.GetDirectory(includedVirtualPath);
        if (!directory.EndsWith("/", StringComparison.OrdinalIgnoreCase))
        {
            directory += "/";
        }

        return new Regex(@"url\s*\(\s*([\'""]?)(?<scheme>(?:(?:data:)|(?:https?:))?)(?<url>(\\\1|.)*?)\1\s*\)")
            .Replace(input, match => string.Concat(
                "url(",
                match.Groups[1].Value,
                match.Groups["scheme"].Value,
                match.Groups["scheme"].Value == "" ?
                    RebaseUrlToAbsolute(directory, match.Groups["url"].Value) :
                    match.Groups["url"].Value,
                match.Groups[1].Value,
                ")"
            ));
    }

    private static string RebaseUrlToAbsolute(string baseUrl, string url)
    {
        if (string.IsNullOrWhiteSpace(url) || string.IsNullOrWhiteSpace(baseUrl)
            || url.StartsWith("/", StringComparison.OrdinalIgnoreCase))
        {
            return url;
        }

        return VirtualPathUtility.ToAbsolute(string.Concat(baseUrl, url));
    }
}

berdasarkan https://stackoverflow.com/questions/171480/regex-grabbing-values-between-quotation-marks/34198968#34198968

 Community
Community
Jawaban edit 23 Mei 2017 в 12:32
0
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 1 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi