"Не могу прочитать чванство JSON из http://localhost:52056/undefined"? - PullRequest
0 голосов
/ 27 июня 2018

Swagger хорошо работал для меня в моем приложении Web API 2.2 по следующему адресу: http://localhost:52056/swagger. Однако я недавно обновил решение для поддержки управления версиями, поэтому теперь оно поддерживает api / v1 / и api / v2 /. Теперь URL Swagger, который я использовал, возвращает следующую ошибку при загрузке страницы Swagger:

Не могу прочитать чванство JSON из http://localhost:52056/undefined

Как мне обновить SwaggerConfig.cs для поддержки Swagger для разных версий API? Вот мой текущий SwaggerConfig.cs:

using System.Web.Http;
using WebActivatorEx;
using Janus.SecurityApi.Api;
using Swashbuckle.Application;
using System.Configuration;

[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]

namespace SecurityApi.Api
{
    public class SwaggerConfig
    {
        public static void Register()
        {
            var thisAssembly = typeof(SwaggerConfig).Assembly;

            GlobalConfiguration.Configuration
                .EnableSwagger(c =>
                {
                    c.RootUrl(req => GetRootUrlFromAppConfig());
                    c.Schemes(new[] { GetSchemeFromAppConfig() });
                    c.SingleApiVersion("v1", "Security API");
                    c.IncludeXmlComments(
                        string.Format(
                            @"{0}\App_Data\SecurityApi.Api.xml",
                            System.AppDomain.CurrentDomain.BaseDirectory));
                    c.IncludeXmlComments(
                        string.Format(
                            @"{0}\App_Data\SecurityApi.Core.xml",
                            System.AppDomain.CurrentDomain.BaseDirectory));
                })
                .EnableSwaggerUi(c =>
                    //for non-public sites, error widget will display 
                    //at bottom of swagger page unless disabled
                    c.DisableValidator()
                );
        }

        private static string GetRootUrlFromAppConfig()
        {
            return ConfigurationManager.AppSettings["swaggerBaseUrl"];
        }

        private static string GetSchemeFromAppConfig()
        {
            return ConfigurationManager.AppSettings["swaggerScheme"];
        }
    }
}

1 Ответ

0 голосов
/ 27 июня 2018

Вместо SingleApiVersion вам нужно использовать MultipleApiVersions

c.MultipleApiVersions(
    (apiDesc, targetApiVersion) => targetApiVersion.Equals("default", StringComparison.InvariantCultureIgnoreCase) ||                     // Include everything by default
                                    apiDesc.Route.RouteTemplate.StartsWith(targetApiVersion, StringComparison.InvariantCultureIgnoreCase), // Only include matching routes for other versions
    (vc) =>
    {
        vc.Version("default", "Swagger_Test");
        vc.Version("v1_0", "Swagger_Test V1_0");
        vc.Version("v2_0", "Swagger_Test V2_0");
    });

Посмотрите примеры на странице проекта:
Swashbuckle / BLOB / Master / README.md # описывающие многодисковых API-версии

На UnitTests также есть пример:
Swashbuckle / BLOB / Master / Swashbuckle.Tests / Кураж / CoreTests.cs # L457

...