Asp.netコアに両方(swaggerとodata)を実装しようとしましたが、機能していません。
Odataに指定されたルートを統合できません。
次の構成があり、一般的なエラーが表示されます。
これはエラーです
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();
});
}
}
DocumentFilterを使用してこれを行うことができました。以下の例のようなクラスを作成し、Swagger構成に次のように追加します。
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new Info { Title = "Your title API v1.0", Version = "v1.0" });
options.DocumentFilter<CustomDocumentFilter>();
});
Swaggerをいくつかの異なる方法で統合できます。ベアボーンをサポートするには、ODataが提供する ODataSwaggerConverter を使用できます。これにより、EDMがSwaggerドキュメントに効果的に変換されます。これをSwashbuckleのようなSwaggerジェネレーターライブラリに接続するには、カスタムジェネレーターを作成して登録するだけです。 UIとクライアント側の要素は変更しないでください。生成されたSwaggerドキュメントでは不十分な場合、ODataSwaggerConverterの基本実装はまだ妥当な出発点です。
ASP.NET CoreでODataに API Versioning を使用している場合、対応する API Explorerパッケージ を追加するだけです。スワッシュルは、あなたの側での追加作業がほとんどない状態で点灯します。 ASP.NET Core with OData Swagger サンプルアプリケーションには、エンドツーエンドの動作例があります。