aSP.Net Core(バージョン1.1.2)でWeb APIを構築し、Swashbuckle.AspNetCoreを使用してSwagger定義を生成しました。
以下は、自動生成されたSwagger定義の一部です。パスを変更して、/ api/ApiNameが含まれないようにしたいのですが、basePathに含まれるようになり、現在は/になっています。
{
"swagger": "2.0",
"info": {
"version": "v1",
"title": "ApiName.V1"
},
"Host": "ApiUrl",
"basePath": "/api/ApiName",
"paths": {
"/": {
"get": {
"tags": [
"ApiName"
],
.........
だから私が取得したいのは:
{
"swagger": "2.0",
"info": {
"version": "v1",
"title": "ApiName.V1"
},
"Host": "ApiUrl",
"basePath": "/",
"paths": {
"/api/ApiName": {
"get": {
"tags": [
"ApiName"
],
.........
.Net Coreで記述されていない他のAPIがいくつかあり、デフォルトルートを追加することで同じ問題を修正しました。 APIコントローラーの上部にあるルートを削除して、.NetCoreで同じことを試みました
[Route("api/[Controller]")]
それをStartup.csに追加します。しかし、これは機能しませんでした。誰かがこれを修正する方法について何か考えがありますか?
結局、私はこれを使ってそれを修正しました:
preSerializeFiltersを設定して、BasePathの追加とパスの編集の両方を行うことができます。もっとエレガントな方法があると思いましたが、これはうまくいきます。
var basepath = "/api/AppStatus";
c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.BasePath = basepath);
c.PreSerializeFilters.Add((swaggerDoc, httpReq) => {
IDictionary<string, PathItem> paths = new Dictionary<string, PathItem>();
foreach (var path in swaggerDoc.Paths)
{
paths.Add(path.Key.Replace(basepath, "/"), path.Value);
}
swaggerDoc.Paths = paths;
});
IDocumentFilterを使用すると、結果のSwagger定義を変更できます。
ここにいくつかの例があります: