私は現在、自分のプロジェクトでswaggerを使用していますが、そこには100以上のコントローラがあります。コントローラの数が多いため、UIドキュメントのページを掃除するのにコントローラをロードするのに5分以上かかります。 UIページで特定のコントローラを選択し、それらのオプションのみをロードすることは可能ですか? それ以外の方法では、UIページを高速に読み込むことができますか? 助けてください!swagger-swashbuckle UIで選択したコントローラのみを表示
答えて
コントローラのいずれかでApiExplorerSettingsを使用すると、コントローラを完全に無視することも、メソッドを無視することもできます。
[ApiExplorerSettings(IgnoreApi = true)]
public class MyController
{
[ApiExplorerSettings(IgnoreApi = true)]
public string MyMethod
{
...
}
}
コントローラを動的に選択する必要があります。私は、より魅力的なUIでオプションを持ち、オプションでコントローラーを選択し、それらを動的にロードしたいと考えています。出来ますか? –
あなたが実際に発生した後に仕様の一部の要素を削除することができ、そして、彼らはその後、統合され威張っ-UIに含まれませんswashbuckleのドキュメントフィルタを使用します。例えば、以下のようにクラスを作成します。その後、
using System;
using System.Web.Http.Description;
using Swashbuckle.Swagger;
internal class SwaggerFilterOutControllers : IDocumentFilter
{
void IDocumentFilter.Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
{
foreach (ApiDescription apiDescription in apiExplorer.ApiDescriptions)
{
Console.WriteLine(apiDescription.Route.RouteTemplate);
if ((apiDescription.RelativePathSansQueryString().StartsWith("api/System/"))
|| (apiDescription.RelativePath.StartsWith("api/Internal/"))
|| (apiDescription.Route.RouteTemplate.StartsWith("api/OtherStuff/"))
)
{
swaggerDoc.paths.Remove("/" + apiDescription.Route.RouteTemplate.TrimEnd('/'));
}
}
}
}
とフィルタを含めるようにSwaggerConfig.csファイルを編集します。コントローラは仕様から削除されているがいること
GlobalConfiguration.Configuration
.EnableSwagger(c =>
c.DocumentFilter<SwaggerFilterOutControllers>();
注、そのような他の項目を結果モデルは依然として仕様に含まれ、依然としてページの読み込み速度が遅くなる可能性があるためです。
コントローラ/モデルのすべてを最初に列挙しているために単純に遅くなる可能性もあります。この場合、これは役に立たないかもしれません。
編集:UIページが表示されるたびに定義全体が再生成されることに気付きました(これはシナリオでは危険になる可能性があります)。幸い、これをキャッシュするのは簡単です(これは大部分の人が実行時に変更してはいけないのですばらしいはずです)。
c.CustomProvider((defaultProvider) => new CachingSwaggerProvider(defaultProvider));
をし、臆面もなく
using Swashbuckle.Swagger;
using System.Collections.Concurrent;
namespace <your namespace>
{
public class CachingSwaggerProvider : ISwaggerProvider
{
private static ConcurrentDictionary<string, SwaggerDocument> _cache =
new ConcurrentDictionary<string, SwaggerDocument>();
private readonly ISwaggerProvider _swaggerProvider;
public CachingSwaggerProvider(ISwaggerProvider swaggerProvider)
{
_swaggerProvider = swaggerProvider;
}
public SwaggerDocument GetSwagger(string rootUrl, string apiVersion)
{
string cacheKey = string.Format("{0}_{1}", rootUrl, apiVersion);
return _cache.GetOrAdd(cacheKey, (key) => _swaggerProvider.GetSwagger(rootUrl, apiVersion));
}
}
}
ありがとうございます@rory_za。今私のために働いています。どうもありがとうございます。 –
Pleasure @SUBASH。私はそれが今あなたのために働いてうれしいです。これまたは任意の回答があなたの質問を解決した場合は、チェックマークをクリックして[受諾](https://meta.stackexchange.com/q/5234/179419)を検討してください。これは、あなたが解決策を見つけ出し、回答者とあなた自身の両方に評判を与えていることを広範なコミュニティに示します。これを行う義務はありません。 –
- 1. フィールドでCSVをソートし、選択した行のみを表示
- 2. リストビューで選択した数のアイテムのみをアンドロイドで表示
- 3. UI-Selectが選択された値を表示しない
- 4. 選択した値をVB6でのみ表示する
- 5. UI選択コントローラを拡張する
- 6. オートコンプリート選択を選択した場合にのみ表示する方法は?
- 7. 表示選択したオプション
- 8. ユーザーがUIで選択したオブジェクトを作成して表示します。
- 9. ジャンブリングで選択したデータを表示
- 10. 選択したアイテムのリストのみを表示するには?
- 11. 角度UI-選択NGモデルがコントローラ
- 12. 複数選択ドロップダウンリストで選択したオプションを表示 - Yii2
- 13. MD-表示]を選択し、すでに選択された値
- 14. ドロップダウンリスト(HTML)から選択した値を選択した後の表を表示
- 15. サイドバー/選択したサブメニューのみを表示するメニュー
- 16. 選択したLog4jデバッグ・ステートメントのみを表示
- 17. 選択したAPIのドキュメントを表示
- 18. 選択ボックスに「選択したオプション」を表示しますか?
- 19. リストから選択した選択肢を表示しない?
- 20. Wooで選択された商品のみ表示
- 21. Selenium WebDriverでMaterial UIの選択フィールド(ドロップダウンリスト)が表示される
- 22. Jquery UIで選択した要素を選択する方法
- 23. は、レールで選択済みのアイテムを表示します。
- 24. ユーザーが選択したテキストを表示
- 25. c#選択したデータを表示
- 26. 選択したボタンを表示
- 27. 選択したアイテムをリストボックスに表示
- 28. 表示選択した要素のポップアップ
- 29. Android UI:選択時にフルスクリーンで表示できるギャラリービューアー
- 30. 表示し、選択したレコード
おそらくコントローラの数が問題であるhttps://github.com/domaindrivendev/Swashbuckle/blob/master/Swashbuckle.Dummy.Core/App_Start/CachingSwaggerProvider.csからコピーされたこのクラスを使用します。
コンフィグにこれを追加しますか?個別のドメインアプリケーションに統合または分割する。 1つのアプリケーション内の100個のコントローラーは、わずかな臭いを表します。 – benPearce