I have a fresh install of EPi 6 with Composer and in my code I am doing the following:
vpp = System.Web.Hosting.HostingEnvironment.VirtualPathProvider as VirtualPathUnifiedProvider;
if (vpp != null)
// do some stuff
However vpp is always null, is there a basic setting etc that I am blindly missing :-)
Thanks a in advance
I might be mistaken, but it seems like you're just casting a class to another class, which make no sense. You're missing the actual vpp object. What are you trying to achieve?
How did you solve this?
VirtualPathProviders are "chained" together (they have a property Previous that points to next in chain). System.Web.Hosting.HostingEnvironment.VirtualPathProvider will just point to the last in chain which might or might not be a VirtualPathUnifiedProvider (depending on which is registered last in your configuration).
If you are looking for getting a handle to a specific VirtualPathUnifiedProvider my suggestion is to use EPiServer.Web.Hosting.VirtualPathHandler.Instance.VirtualPathProviders where you can find the provider you are looking for.
Hello Johan, thank you for your fast answer, for my case, it is a VirtualPathNativeProvider, still it is null, even UnifiedFile casts are null. How am i suppose to do? customFile is null in this example.
ICollection<VirtualPathProvider> vpppp = EPiServer.Web.Hosting.VirtualPathHandler.Instance.VirtualPathProviders.Keys;
UnifiedFile customFile = null;
foreach (var x in vpppp)
VirtualPathNativeProvider x2 = x as VirtualPathNativeProvider;
if (x2!=null && x2.ProviderName == "ImageBank")
VirtualFile vf = x2.GetFile(path);
customFile = vf as UnifiedFile;
VirtualPathNativeProvider vpp = System.Web.Hosting.HostingEnvironment.VirtualPathProvider as VirtualPathNativeProvider
To get a file you should not need to call to a specific provider, since they are chained you should call the first and that one will send it to next in chain until a provider hanldes the file or null if no provider handles the file.
So if you call:
var file = System.Web.Hosting.HostingEnvironment.VirtualPathProvider.GetFile(path)
what do you get back? Typically if no provider matches you get an instance of MapPathBasedVirtualFile.
What does your path look like? It should be a relative path like for example /Global/MyFile.jpg or ~/Global/MyFile.jpg
oh, i get it, but i do get a VirtualFile, but when i cast it to UnifiedFile it is null. Any Ide?
Strange behavior, the code below works though:
UnifiedDirectory directory = System.Web.Hosting.HostingEnvironment.VirtualPathProvider.GetDirectory(originalsPath) as UnifiedDirectory;