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