/// <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(); }