Absolute URL in ASP bundle

前端 未结 6 797
轻奢々
轻奢々 2021-01-07 19:14

I use a jQuery library for Google Maps, and it depends on the Google scripts to be loaded first. I\'d like to be able to include both in the bundle as such:

         


        
相关标签:
6条回答
  • 2021-01-07 19:29

    Have you tried enabling CDN support and seeing if that allows the absolute URL to work:

    bundles.UseCdn = true;
    
    0 讨论(0)
  • 2021-01-07 19:30

    If you are using a version of System.Web.Optimization >= 1.1.2, there is a new convenient way of overriding the url's for Styles and Scripts. In the example below, I am grabbing a CdnBaseUrl from web.config to use as the base url for all scripts and stylesheets:

    public class BundleConfig
    {
        private static readonly string BaseUrl = ConfigurationManager.AppSettings["CdnBaseUrl"];
    
        public static void RegisterBundles(BundleCollection bundles)
        {
            // This is the new hotness!!
            Styles.DefaultTagFormat = "<link href=\"" + BaseUrl + "{0}\" rel=\"stylesheet\"/>";
            Scripts.DefaultTagFormat = "<script src=\"" + BaseUrl + "{0}\"></script>";
    
            bundles.Add(new ScriptBundle("~/bundles/js").Include(
                "Your scripts here..."
            ));
    
            bundles.Add(new StyleBundle("~/bundles/css").Include(
                "Your css files here..."
            ));
        }
    }
    

    More info on static site (CDN) optimization

    0 讨论(0)
  • 2021-01-07 19:33

    Based on the MVC tutorials, your syntax is incorrect for creating a bundle from a CDN. And as others have said, ensure that you have the bundles.UseCdn = true; property set. Using the example on the MVC site - your code should reflect the following:

    public static void RegisterBundles(BundleCollection bundles)
    {
       bundles.UseCdn = true;   //enable CDN support
       //add link to jquery on the CDN
       var jqueryCdnPath = "http://maps.googleapis.com/maps/api/js?sensor=false&amp;libraries=places";
       bundles.Add(new ScriptBundle("myfoobundle", jqueryCdnPath).Include(
                    "~/Scripts/jquery-{version}.js"));
    }
    
    0 讨论(0)
  • 2021-01-07 19:43

    I tried this as suggested and it didn't work:

    string googleMapsApiCDN = "http://maps.google.com/maps/api/js?sensor=false&amp;language=en";
            bundles.Add(new ScriptBundle("~/bundles/gmap3", googleMapsApiCDN).Include(
                        "~/Scripts/GMap3/gmap3.min.js",         // GMap3 library
                        "~/Scripts/GMap3/mygmap3-about.js"      // Pops up and configures     
    GMap3 on About page
                        ));
    

    The mygmap3-about.js script was rendered but the gmap3.min.js and the CDN script from google where both excluded.

    0 讨论(0)
  • 2021-01-07 19:45

    If it is just a matter of getting absolute url in bundle then you can go for this.

    public static class Extensions
        {
            public static IHtmlString RenderScript(this UrlHelper helper, params string[] paths)
            {
                string scripts = System.Web.Optimization.Scripts.Render(paths).ToHtmlString();
                string hostName = HttpContext.Current.Request.Url.Scheme + Uri.SchemeDelimiter + HttpContext.Current.Request.Url.Authority;
                string replaced = Regex.Replace(scripts, "src=\"/", "src=\"" + hostName + "/", RegexOptions.Multiline | RegexOptions.IgnoreCase);
                return new HtmlString(replaced);
            }
        }
    

    This will basically take the bahvior from Scripts.Render and then apply absolute urls to it. Then in the view you have to write

      @Url.RenderScript("~/bundles/jquery")
    

    instead of

      @Scripts.Render("~/bundles/jquery")
    

    Enjoy coding!!...

    0 讨论(0)
  • 2021-01-07 19:48

    Currently you would have to include a local copy of the jquery that you are depending on inside of the bundle, or you would have to manage the script tags as you mention. We are aware of this kind of depedency management issue and it falls under the category of asset management which we are tracking with this work item on codeplex

    0 讨论(0)
提交回复
热议问题