private string GetMetadataForContent(OpenApiContent content, OpenApiMetadataRequest request)
        {
            string basePath = Request.VirtualPath()
                              .EnsureSuffixApplied("/") + GetBasePath(content, request.SchoolYearFromRoute);

            return(content.Metadata
                   .Replace("%HOST%", $"{Request.Host(_useProxyHeaders)}:{Request.Port(_useProxyHeaders)}")
                   .Replace("%TOKEN_URL%", TokenUrl())
                   .Replace("%BASE_PATH%", basePath));
        }
        public HttpResponseMessage Get([FromUri] OpenApiMetadataRequest request)
        {
            _logger.Info($"Looking up document for feedname = {request.GetFeedName()}");

            var openApiContent = _openApiMetadataCacheProvider.GetOpenApiContentByFeedName(request.GetFeedName());

            if (openApiContent == null)
            {
                _logger.Warn($"Unable to load swagger document for {request.GetFeedName()}");
                return(new HttpResponseMessage(HttpStatusCode.NotFound));
            }

            var metadata = GetMetadataForContent(openApiContent, request);

            var etag = new EntityTagHeaderValue(
                HashHelper.GetSha256Hash(metadata)
                .ToHexString()
                .DoubleQuoted());

            if (ActionContext.Request.Headers.IfNoneMatch.Contains(etag))
            {
                return(new HttpResponseMessage(HttpStatusCode.NotModified));
            }

            var result = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Headers =
                {
                    ETag = etag
                },
                Content = new StringContent(metadata)
            };

            result.Content.Headers.ContentType = new MediaTypeHeaderValue(SwaggerDocumentHelper.ContentType);

            return(result);
        }