diff --git a/zero.Core/Localization/CultureResolver.cs b/zero.Core/Localization/CultureResolver.cs index 347dbd60..e8960f07 100644 --- a/zero.Core/Localization/CultureResolver.cs +++ b/zero.Core/Localization/CultureResolver.cs @@ -27,8 +27,9 @@ public class CultureResolver : ICultureResolver } else { - var session = context.Store.Session(); - Language language = await session.Query().FirstOrDefaultAsync(); + //var session = context.Store.Session(); + //Language language = await session.Query().FirstOrDefaultAsync(); + Language language = new() { Code = "de-DE" }; if (language == null) { diff --git a/zero.Core/Localization/Localizer.cs b/zero.Core/Localization/Localizer.cs index bf2924ce..5d89a598 100644 --- a/zero.Core/Localization/Localizer.cs +++ b/zero.Core/Localization/Localizer.cs @@ -1,12 +1,11 @@ -using Raven.Client.Documents; -using Raven.Client.Documents.Session; +using System.Collections.Concurrent; using System.Reflection; namespace zero.Localization; public class Localizer : ILocalizer { - protected Dictionary Cache { get; private set; } = new(); + protected ConcurrentDictionary Cache { get; private set; } = new(); protected IZeroStore Store { get; private set; } @@ -38,11 +37,7 @@ public class Localizer : ILocalizer } value = translation.Value; - - lock (Cache) // TOOD use concurrent dictionary - { - Cache[key] = value; - } + Cache.TryAdd(key, value); } if (tokens != null) diff --git a/zero.Core/Media/MediaFileSystem.cs b/zero.Core/Media/MediaFileSystem.cs index 2d0e5294..d90dfdde 100644 --- a/zero.Core/Media/MediaFileSystem.cs +++ b/zero.Core/Media/MediaFileSystem.cs @@ -20,7 +20,20 @@ public class MediaFileSystem : PhysicalFileSystem, IMediaFileSystem } return PublicPathPrefix + path.TrimStart('/'); } + + + /// + public bool IsMediaPath(string path) + { + return path.StartsWith(PublicPathPrefix, StringComparison.InvariantCultureIgnoreCase); + } } -public interface IMediaFileSystem : IFileSystem { } \ No newline at end of file +public interface IMediaFileSystem : IFileSystem +{ + /// + /// Determine whether the given path is part of the media file system + /// + bool IsMediaPath(string path); +} \ No newline at end of file diff --git a/zero.Core/Routing/ZeroRoutesTransformer.cs b/zero.Core/Routing/ZeroRoutesTransformer.cs index bf6a6333..c6e63188 100644 --- a/zero.Core/Routing/ZeroRoutesTransformer.cs +++ b/zero.Core/Routing/ZeroRoutesTransformer.cs @@ -8,11 +8,13 @@ namespace zero.Routing; public class ZeroRoutesTransformer : DynamicRouteValueTransformer { readonly IRouteResolver RouteResolver; + readonly IMediaFileSystem MediaFileSystem; readonly ILogger Logger; - public ZeroRoutesTransformer(IRouteResolver routeResolver, ILogger logger) + public ZeroRoutesTransformer(IRouteResolver routeResolver, IMediaFileSystem mediaFileSystem, ILogger logger) { RouteResolver = routeResolver; + MediaFileSystem = mediaFileSystem; Logger = logger; } @@ -47,6 +49,12 @@ public class ZeroRoutesTransformer : DynamicRouteValueTransformer return null; } + // do not continue if it is a media path + if (MediaFileSystem.IsMediaPath(httpContext.Request.Path)) + { + return null; + } + // resolve route from URL route = await RouteResolver.ResolveUrl(httpContext);