将swashbuckle swagger与odata集成在ASP.Net Core中

Ayu*_*rma 7 odata swashbuckle asp.net-core

我试图在asp.net核心中同时实现(swagger和odata),但是它不起作用。

我无法集成给odata的路由。

我具有以下配置,并且收到一般错误。

组态

这是错误

这是错误

Kiz*_*mar 11

将OData添加到.Net Core项目时,我们遇到了同样的问题。这篇文章的代码片段中显示的变通办法解决了Swagger UI加载时我们的API错误。

据我所知,Swashbuckle for AspNetCore不支持OData。因此,在上面的链接中添加了变通方法代码之后,我们的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();
        });
    }
}
Run Code Online (Sandbox Code Playgroud)


nyc*_*elp 6

我能够使用 DocumentFilter 做到这一点。创建一个类似于下面示例的类,然后将其添加到您的 Swagger 配置中:

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

Github 示例