web-dev-qa-db-ja.com

ASP.Net Coreでスワッシュバックルスワッガーとodataを統合する

Asp.netコアに両方(swaggerとodata)を実装しようとしましたが、機能していません。

Odataに指定されたルートを統合できません。

次の構成があり、一般的なエラーが表示されます。

Configuration

これはエラーです

this is the error

7
Ayushi Sharma

ODataを.Net Coreプロジェクトに追加すると、同じ問題が発生しました。 この投稿 のコードスニペットに示されている回避策は、Swagger UIの読み込み時のAPIエラーを修正しました。

私が知る限り、ODataはAspNetCoreのSwashbuckleではサポートされていません。したがって、上記のリンクに回避策コードを追加した後、Swagger UIは機能しますが、ODataエンドポイントは表示されません。

リンクからのコードスニペット:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        services.AddOData();

        // Workaround: https://github.com/OData/WebApi/issues/1177
        services.AddMvcCore(options =>
        {
            foreach (var outputFormatter in options.OutputFormatters.OfType<ODataOutputFormatter>().Where(_ => _.SupportedMediaTypes.Count == 0))
            {
                outputFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/prs.odatatestxx-odata"));
            }
            foreach (var inputFormatter in options.InputFormatters.OfType<ODataInputFormatter>().Where(_ => _.SupportedMediaTypes.Count == 0))
            {
                inputFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/prs.odatatestxx-odata"));
            }
        });
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {                
        var builder = new ODataConventionModelBuilder(app.ApplicationServices);

        builder.EntitySet<Product>("Products");

        app.UseMvc(routebuilder => 
        {
            routebuilder.MapODataServiceRoute("ODataRoute", "odata", builder.GetEdmModel());

            // Workaround: https://github.com/OData/WebApi/issues/1175
            routes.EnableDependencyInjection();
        });
    }
}
11
Kizmar

DocumentFilterを使用してこれを行うことができました。以下の例のようなクラスを作成し、Swagger構成に次のように追加します。

        services.AddSwaggerGen(options =>
        {
            options.SwaggerDoc("v1", new Info { Title = "Your title API v1.0", Version = "v1.0" });
            options.DocumentFilter<CustomDocumentFilter>();
        });

Githubの例

4
nycdanielp

Swaggerをいくつかの異なる方法で統合できます。ベアボーンをサポートするには、ODataが提供する ODataSwaggerConverter を使用できます。これにより、EDMがSwaggerドキュメントに効果的に変換されます。これをSwashbuckleのようなSwaggerジェネレーターライブラリに接続するには、カスタムジェネレーターを作成して登録するだけです。 UIとクライアント側の要素は変更しないでください。生成されたSwaggerドキュメントでは不十分な場合、ODataSwaggerConverterの基本実装はまだ妥当な出発点です。

ASP.NET CoreでODataに API Versioning を使用している場合、対応する API Explorerパッケージ を追加するだけです。スワッシュルは、あなたの側での追加作業がほとんどない状態で点灯します。 ASP.NET Core with OData Swagger サンプルアプリケーションには、エンドツーエンドの動作例があります。

1
Chris Martinez