web-dev-qa-db-fra.com

Intégrez swagbuckle swagger avec odata dans ASP.Net Core

J'ai essayé d'implémenter les deux (swagger et odata) dans le noyau asp.net, mais cela ne fonctionne pas. 

Je ne parviens pas à intégrer l'itinéraire indiqué pour l'odata. 

J'ai la configuration suivante et je reçois une erreur générique.

Configuration

C'est l'erreur

this is the error

4
Ayushi Sharma

Nous avons rencontré le même problème lors de l'ajout d'OData à notre projet .Net Core. Les solutions de contournement indiquées dans l'extrait de code sur cet article ont corrigé nos erreurs d'API lors du chargement de l'interface utilisateur Swagger.

Autant que je sache, OData n'est pas pris en charge dans Swashbuckle for AspNetCore. Ainsi, après avoir ajouté le code de contournement dans le lien ci-dessus, notre interface utilisateur Swagger fonctionne, mais aucun des points de terminaison OData ne s'affiche.

Extrait de code du lien:

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();
        });
    }
}
4
Kizmar

J'ai été capable de faire cela en utilisant un DocumentFilter. Créez une classe comme dans l'exemple ci-dessous, puis ajoutez-la à votre configuration Swagger en tant que:

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

Exemple Github

4
nycdanielp

Vous pouvez intégrer Swagger de différentes manières. Pour la prise en charge du barebone, vous pouvez utiliser le ODataSwaggerConverter fourni par OData. Cela convertira effectivement le EDM en un document Swagger. Pour relier ceci à une bibliothèque de générateur Swagger telle que Swashbuckle, il vous suffit de créer et d’enregistrer un générateur personnalisé. L'interface utilisateur et le côté client des choses devraient rester inchangés. Si le document Swagger généré ne suffit pas, la mise en œuvre de base de ODataSwaggerConverter reste un bon début.

Si vous utilisez Versioning API pour OData avec ASP.NET Core, vous devez uniquement ajouter le package API Explorer correspondant . Swashuckle s'illuminera avec peu ou pas de travail supplémentaire de votre part. Le/ ASP.NET Core avec OData Swagger exemple d’application dispose d’un exemple de travail de bout en bout.

0
Chris Martinez