Asp.Net WebApi swagger에 버전 제어 추가

5802 단어
Asp.Net WebApi에 버전 제어를 추가하고 swagger에 버전별로 인터페이스를 표시합니다
참조 버전 제어 패키지



버전 제어 코드 추가
다음과 같이 App 수정Start의 WebApiConfig 파일
public static void Register(HttpConfiguration config)
{
    config.Filters.Add(new ApiExceptionFilter());
    config.MessageHandlers.Add(new WrapperHandler());
    // Web API      

    config.AddApiVersioning(o =>
    {
        o.AssumeDefaultVersionWhenUnspecified = true;//       action   1.0  

        o.ReportApiVersions = true;//          
        o.ApiVersionReader = ApiVersionReader.Combine(new HeaderApiVersionReader("api-version"), new QueryStringApiVersionReader("api-version"));//  Header QueryString       api   
        o.DefaultApiVersion = new ApiVersion(1, 0);//      
    });

    var apiExplorer = config.AddVersionedApiExplorer(
            options =>
            {
                options.GroupNameFormat = "'v'VVV";

                // note: this option is only necessary when versioning by url segment. the SubstitutionFormat
                // can also be used to control the format of the API version in route templates
                options.SubstituteApiVersionInUrl = true;
            });

    // Web API   
    config.MapHttpAttributeRoutes();


    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
//    swagger            
    SwaggerConfig.Register(config, apiExplorer);

}

swagger 패키지 참조



swagger를 멀티버전api로 수정
swagger 패키지를 참조하면 자동으로 AppStart는 다음과 같은 코드의 일부를 수정해야 하는 SwaggerConfig 파일을 추가합니다.
//           swagger,        Web.Http.Description.VersionedApiExplorer apiExplorer  
//[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]

namespace WebApplication1
{
    public class SwaggerConfig
    {
        public static void Register(HttpConfiguration Configuration, Microsoft.Web.Http.Description.VersionedApiExplorer apiExplorer)
        {
            var thisAssembly = typeof(SwaggerConfig).Assembly;

            Configuration
            .EnableSwagger(c =>
            {
                c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());

                c.MultipleApiVersions(
                    (apiDescription, version) => apiDescription.GetGroupName() == version,
                    info =>
                    {
                        foreach (var group in apiExplorer.ApiDescriptions)
                        {
                            //          ,   vs    SwaggerConfig,   SwaggerConfig       ,        SwaggerConfig  ,
                            var description = "A sample application with Swagger, Swashbuckle, and API versioning.";

                            if (group.IsDeprecated)
                            {
                                description += " This API version has been deprecated.";
                            }

                            info.Version(group.Name, $"Create Wordreprot API {group.ApiVersion}");
                        }
                    });


                //      XML          
                var basePath1 = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);//          (  ,      (  )  ,           )
                var xmlComments = Directory.GetFiles(basePath1, "*.xml", SearchOption.AllDirectories).ToList();

                foreach (var xmlComment in xmlComments)
                {
                    c.IncludeXmlComments(xmlComment);
                }
                #region MyRegion

                #endregion
                //   Controller API      
                //c.DocumentFilter();
            })
             .EnableSwaggerUi(
                swagger =>
                {
                    //  api        ,                        ,          
                    swagger.EnableDiscoveryUrlSelector();
                }
             );
        }
    }
}


controller에 버전 표시
이제 controller나 action에 버전 표시를 추가해서 버전을 표시할 수 있습니다. 기본 1.0이 없으면 기본 버전 설정은 코드에 있습니다.
public class Controller1 : ApiController
{
    [ApiVersion("1.0")]
    public async Task Get(){
        returt "1.0"
    }
    public async Task Get2(){
        returt "1.0"
    }
}
public class Controller2 : ApiController
{
    [ApiVersion("2.0")]
    public async Task Get(){
        returt "2.0"
    }
}

요청 보내기
요청에 버전 번호 표시를 하고 버전이 없으면 기본 1.0입니다. 요청은query 매개 변수나 헤더 방식을 통해 가능합니다. 이름은api-version입니다. 이 이름은 상기 코드에서 설정된 것입니다.
이 가능하다, ~할 수 있다,...
  • swagger 설명 중의 중국어 난코드는 vs 새 Swagger Config를 사용하여 원래 Swagger Config의 내용을 복사하고 자동으로 생성된 Swagger Config 파일을 삭제할 수 있습니다
  • 시작 오류 "This XML file does not appear to have any style information associated with it. The document tree is shown below."이것은 swagger를 등록하는 순서 오류입니다. swagger를 Config해야 합니다.Register(config, apiExplorer);라우팅 등록 후
  • api버전을 선택한 후 swagger ui 페이지가 새로 고침되지 않았거나 이전 버전이 표시되지 않았습니다. 버전을 선택한 후 초점을 잃고 다시 차를 돌려야 합니다. 그렇지 않으면 선택 상자가 튀어나와 계속 선택
  • 합니다.
    참고 자료
  • aspnet-api-versioning-SwaggerWebApiSample
  • Swagger UI 중국어 대미지 해결
  • 좋은 웹페이지 즐겨찾기