コード例 #1
0
        protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var swaggerProvider = _config.GetSwaggerProvider(request);
            var rootUrl         = _config.GetRootUrl(request);
            var apiVersion      = request.GetRouteData().Values["apiVersion"].ToString();
            var cacheKey        = string.Format("{0}_{1}", rootUrl, apiVersion);

            try
            {
                SwaggerDocument swaggerDoc;
                if (_cache.ContainsKey(cacheKey))
                {
                    _cache.TryGetValue(cacheKey, out swaggerDoc);
                }
                else
                {
                    swaggerDoc = swaggerProvider.GetSwagger(rootUrl, apiVersion);
                    _cache.Add(cacheKey, swaggerDoc);
                }

                var content = ContentFor(request, swaggerDoc);
                return(TaskFor(new HttpResponseMessage {
                    Content = content
                }));
            }
            catch (UnknownApiVersion ex)
            {
                return(TaskFor(request.CreateErrorResponse(HttpStatusCode.NotFound, ex)));
            }
        }
コード例 #2
0
        protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var swaggerProvider = _config.GetSwaggerProvider(request);
            var rootUrl         = _config.GetRootUrl(request);
            var apiVersion      = request.GetRouteData().Values["apiVersion"].ToString();

            try
            {
                var swaggerDoc = swaggerProvider.GetSwagger(rootUrl, apiVersion);
                var content    = ContentFor(request, swaggerDoc);
                return(TaskFor(new HttpResponseMessage {
                    Content = content
                }));
            }
            catch (UnknownApiVersion ex)
            {
                return(TaskFor(request.CreateErrorResponse(HttpStatusCode.NotFound, ex)));
            }
        }
コード例 #3
0
        protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (!IsAuthenticated())
            {
                return(Task.FromResult(request.CreateResponse(HttpStatusCode.Unauthorized)));
            }

            stopWatch.Start();
            try
            {
                var swaggerProvider = _config.GetSwaggerProvider(request);
                var rootUrl         = _config.GetRootUrl(request);
                var apiVersion      = request.GetRouteData().Values["apiVersion"].ToString();

                var swaggerDoc = swaggerProvider.GetSwagger(rootUrl, apiVersion);
                var content    = ContentFor(request, swaggerDoc);
                return(cancellationToken.IsCancellationRequested
                    ? Task.FromResult(default(HttpResponseMessage))
                    : Task.FromResult(new HttpResponseMessage {
                    Content = content
                }));
            }
            catch (UnknownApiVersion ex)
            {
                return(Task.FromResult(request.CreateErrorResponse(HttpStatusCode.NotFound, ex)));
            }
            catch (Exception ex)
            {
                LogAdapter.LogError("Could not create swagger specification file", ex);
                return(Task.FromResult(default(HttpResponseMessage)));
            }
            finally
            {
                stopWatch.Stop();
                LogAdapter.LogInfo($"Swagger specification generation took: {stopWatch.ElapsedMilliseconds} ms");
            }
        }