Custom (image) Content Provider - image doesn't render in edit mode

Bob Maes
Member since: 2017


I'm in the middle of implementing a custom content provider to server images from an external dam system.

I've got almost everything running, except, I have no images in on page edit mode.

My content provider returns a custom IContent type that inhertits from ImageData, this to blend in as best as possible in epi.
Behind it I have a custom blobprovider to stream images from the dam.

Thumbnails in the shell works, as well as the rendering on the public site. But I don't see any images in edit mode.
And I think the problems lies how epi generates it url's.

If I use an image from de default media library, the url to an image in edit mode is the following:

But when I use an image from my provider, it's like this:

If I open this url, it triggers 2 requests:

  1. http://localhost:1812/EPiServer/CMS/Content/en/dam/9FCBB804-89E5-4443-8D969A9265D74B3B-home-banner.jpg,,1__bynder?epieditmode=True
    Content-Type:text/html; charset=utf-8
  2. http://localhost:1812/EPiServer/CMS/Content/en/dam/9FCBB804-89E5-4443-8D969A9265D74B3B-home-banner.jpg,,1__bynder?epieditmode=False

When I use the edit action menu in the assets pane, it immediately renders the following (correct?) url:

Does anybody already encountered this? Any idea how to resolve this?

Many thanks,


#186153 Dec 13, 2017 7:29
  • Drew Null
    Member since: 2013

    Bob did you ever get this figured out? 

    #196980 Sep 19, 2018 5:03

    I'm experiencing the same problem. Did you ever find a solution?

    #197301 Sep 28, 2018 14:55
  • Bob Maes
    Member since: 2017


    it's been awhile but I think the following code fixed the issue:

    I registered a route in the initialization module of my provider (IInitializableModule.Initialize)

            public void Initialize(InitializationEngine context)
                var settings = context.Locate.Advanced.GetInstance<IBynderSettings>();
                var bynderRoot = EnsureCreateProviderRoot(context, settings);
                EnsureProvider(context, bynderRoot);
            private void EnsureRoutes(IContent bynderRoot)
                // Since we have our structure outside asset root we registera custom route for it
                // and remove the language segment
                // -> disabled for the moment, we want content to be localizable
                //name: "BynderMedia",
                //    url: "bynder/{node}/{partial}/{action}",
                //    defaults: new { action = "index" },
                //    contentRootResolver: (s) => bynderRoot.ContentLink);
                // EPiServer UI needs the language segment
                    name: "BynderMediaEdit",
                    url: CmsHomePath + "bynder/{language}/{medianodeedit}/{partial}/{action}",
                    defaults: new { action = "index" },
                    contentRootResolver: (s) => bynderRoot.ContentLink);
            private static string CmsHomePath
                    var cmsContentPath = VirtualPathUtility.AppendTrailingSlash(EPiServer.Shell.Paths.ToResource("CMS", "Content"));
                    return VirtualPathUtilityEx.ToAppRelative(cmsContentPath).Substring(1);

    Sorry for the slow response, and not updating my post in the first place...


    #197306 Sep 28, 2018 17:10

    Thanks for the response Bob!
    I tried your solution but didn't get it to work (even though it seems like it should). My solution instead were to change the content provider root from the root folder and instead use the global asset root. The content provider root folder were then visible in the media asset folder structure as well, but that wasn't a big problem for me.

    #197725 Oct 11, 2018 13:58