web-dev-qa-db-fra.com

Impossible de charger la définition de l'API

J'ai une simple API ASP.NET Core dans laquelle j'ai un contrôleur censé fonctionner avec un paramètre d'entrée de HttpRequestMessage . J'ai essayé les formateurs standard et ils ne fonctionnaient pas:

  services.AddMvc(options =>
        {

             options.RespectBrowserAcceptHeader = true;

             options.InputFormatters.Add(new XmlSerializerInputFormatter());
             options.OutputFormatters.Add(new XmlSerializerOutputFormatter());

        }

Également essayé ce formateur:

XmlDataContractSerializerOutputFormatter

Et cela n'a pas fonctionné non plus .. donc, je me retrouve donc avec un formateur personnalisé:

public class RawInputFormatter : InputFormatter
{
    public override Boolean CanRead(InputFormatterContext context)
    {
        return true;
    }

    public override async Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context)
    {
        if (context == null)
            throw new ArgumentNullException(nameof(context));

        var request = context.HttpContext.Request;
        using (var reader = new StreamReader(request.Body))
        {
            try
            {
                var content = await reader.ReadToEndAsync();
                return await InputFormatterResult.SuccessAsync(content);
            }
            catch
            {
                return await InputFormatterResult.FailureAsync();
            }
        }
    }
}

Et par conséquent dû changer le type de paramètre d'entrée de HttpRequestMessage à [FromBody]

Et je suis capable de lire le XML d'entrée après ce changement.

MAIS

Maintenant, lorsque je lance l'API (et que j'utilise Swagger), l'écran de Swagger contient le message d'erreur suivant: Impossible de charger la définition de l'API.

Et c'est pour tous les contrôleurs de l'API que j'ai.

J'ai cherché sur Google mais je n'ai rien trouvé de précieux. S'il vous plaît donnez votre avis. 

8
Joe Doe

Il serait plus facile de résoudre ce problème si vous aviez partagé votre configuration swagger.

Essayez d'ajouter ceci à votre configuration swagger:

options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
2
Tarik Tutuncu