web-dev-qa-db-fra.com

Erreur de débogage Swashbuckle - Échec du chargement de la définition de l'API

Existe-t-il un moyen d'obtenir une trace de pile ou des exceptions internes sur les erreurs Swashbuckle/Swagger? À un moment donné, il a cessé de fonctionner. Je ne sais pas si c'était lors de la mise à niveau de .Net Core 2.0 vers 2.1, mais je suis presque sûr que cela fonctionnait toujours après cela. Lorsque je navigue vers myapidomain/swagger/index.html, j'obtiens cette erreur:

enter image description here

Ce qui n'est pas très utile. Cela fonctionnait il y a environ 2 semaines ... Je n'ai changé aucune configuration Swagger. C'est la même chose que ça a toujours été:

public void ConfigureServices(IServiceCollection services)
{
    ...
     services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info
            {
                Version = "v1",
                Title = "My.API",
                Description = "Test"
            });
        });   
}


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
        app.UseDeveloperExceptionPage();
    else
        app.UseHsts();

    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "PropWorx API V1");
    });
    ...
}

J'utilise Swashbuckle.AspNetCore 3.0.0 sur une API Web ASP.Net Core 2.1.

7
Fabricio Rodriguez

Acceptez que le débogage de l'interface utilisateur n'est pas vraiment utile, mais la trace d'exception complète peut être supprimée en ouvrant les outils de débogage de votre navigateur (par exemple F12 sur Chrome), en actualisant votre /swagger endpoint, puis en examinant le swagger.json payload - il s'agit d'une requête XHR qui échouera avec un 500 code d'état.

(Je suggérerais sur un grand projet de mettre le lien en signet, afin qu'à l'avenir vous puissiez simplement aller directement au fichier json, par exemple https://MyHost/swagger/v1/swagger.json)

par exemple. dans l'erreur ci-dessous, j'ai dupliqué le même itinéraire entre deux méthodes:

[HttpGet]
[Route("parseenum")]
public ActionResult CheckEnum([FromQuery] MyEnum someEnum)
...

[HttpGet]
[Route("parseenum")]
public ActionResult CheckEnum2([FromQuery] MyEnum someEnum)
...

Ce qui produit l'erreur:

SwaggerError

Que vous devriez maintenant pouvoir retrouver et corriger.

13
StuartLC

j'ai ce problème aujourd'hui et j'essaie tellement de le résoudre, vous devez supprimer tous les [Route] avant les balises [http] dans le code du contrôleur C # comme ce code par exemple:

    [Route("~/api/getAll")]
    [HttpGet]
    public ActionResult<List<asteriksModel>>GetAll()
    {
        return _context.asterList.ToList();
    }

et votre code d'itinéraire doit être comme ça

    [HttpGet]
    public ActionResult<List<asteriksModel>>GetAll()
    {
        return _context.asterList.ToList();
    }

dans mon projet ça marche bien,

0
MsDeveloper