コード例 #1
0
        /// <summary>
        /// Executes the rewrite.
        /// </summary>
        /// <param name="httpContext">The HTTP context.</param>
        /// <param name="routePrefix">The route prefix.</param>
        public virtual void ExecuteRewrite([NotNull] HttpContextBase httpContext, [NotNull] string routePrefix)
        {
            if (httpContext == null)
            {
                throw new ArgumentNullException(nameof(httpContext));
            }
            if (routePrefix == null)
            {
                throw new ArgumentNullException(nameof(routePrefix));
            }
            if (httpContext.Request.Url == null)
            {
                throw new RequiredObjectIsNullException("httpContext.Request.Url cannot be null.");
            }

            var localPath = httpContext.Request.Url?.LocalPath;

            if (!IsValidLocalPath(localPath, routePrefix))
            {
                return;
            }
            var pathWithoutPrefix = localPath.Substring(routePrefix.Length);

            if (!TryGetParts(pathWithoutPrefix, out var site, out var path, out var language))
            {
                return;
            }
            var newUrl = CreateNewUrl(httpContext, routePrefix, site, path, language);

            httpContext.RewritePath(newUrl);
            httpContext.FlagAsHeadless();
        }