Asp.Net WebApiがswaggerにバージョン管理を追加
5959 ワード
Asp.Net WebApiにバージョン管理を追加し、swaggerにバージョン別インタフェースを表示
次のようにAppを変更します.StartのWebApiConfigファイル
swaggerパッケージを参照すると、自動的にApp_StartはSwaggerConfigファイルを追加し、次のようにコードの一部を変更する必要があります.
コントロールまたはactionにバージョンタグを追加してバージョンをタグ付けできます.タグのデフォルト1.0がない場合は、デフォルトバージョン設定はコードを参照してください.
リクエストにバージョン番号タグを付けます.バージョンがない場合はデフォルト1.0です.リクエストは、前述のコードで構成されたapi-versionというqueryパラメータまたはheaderで構成できます.
swaggerの説明の中の中国語の文字化けして、vsで1つのSwaggerConfigを新しくすることができて、もとのSwaggerConfigの中の内容をコピーして、更に自動的に作成したSwaggerConfigファイル を削除します起動エラー「This XML file does not appear to have any style information associated with it.The document tree is shown below.」これはswaggerを登録する順番が間違っています.Register(config, apiExplorer);ルーティング登録の後に配置します. apiバージョンを選択するとswagger uiページがリフレッシュされないか、前のバージョンが表示されますか.バージョンを選択するとフォーカスを失って車に戻る必要があります.そうしないと、選択ボックスがポップアップして を選択し続けます.
参考資料 aspnet-api-versioning-SwaggerWebApiSample Swagger UI中国語文字化けし解決
バージョン管理パッケージの参照
バージョン管理コードの追加
次のように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パッケージを参照すると、自動的にApp_Startは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();
}
);
}
}
}
コントロールでバージョンをマークする
コントロールまたは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です.リクエストは、前述のコードで構成されたapi-versionというqueryパラメータまたはheaderで構成できます.
発生する可能性のある問題
参考資料