web-dev-qa-db-fra.com

Comment ajouter des formats Json à MvcCore?

Je suis le suivant tutoriel de mise en œuvre IdentityServer4 pour API , mais je ne peux pas appeler la méthode AddJsonFormatters() to services.AddMvcCore(). Je configure actuellement l'API à partir d'un modèle vide dans ASP.NET Core 3.0.0

J'ai ajouté le package NuGet Microsoft.AspNetCore.Mvc.Formatters.Json Sans résultat. De plus, je comprends que l'utilisation de AddMvc() au lieu de AddMvcCore() serait une solution partielle mais je ne peux pas utiliser AddAuthorization() sur AddMvc()

//code extracted from the link
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvcCore()
            .AddAuthorization()
            .AddJsonFormatters();
    }
}

Voici le message d'erreur que je vois ci-dessus:

'IMvcCoreBuilder' ne contient pas de définition pour 'AddJsonFormatters' et aucune méthode d'extension accessible 'AddJsonFormatters' acceptant un premier argument de type 'IMVCoreBuilder' n'a pu être trouvée (utilisez-vous une directive manquante ou une référence d'assembly?)

Est-ce la méthode? Dois-je envoyer un MVCCoreBuilder? Comment je fais ça? Méthode MvcJsonMvcCoreBuilderExtensions.AddJsonFormatters

9
poncho1plan

Lorsque vous appelez services.AddMvc() vous obtenez un IMvcBuilder.

si vous voulez ajouter plus de formateurs de sortie ou d'entrée, le IMvcBuilder a une méthode d'extension que vous pouvez appeler AddMvcOptions ci-dessous vous avez un exemple d'un XmlDataContractSerializerOutputFormatter qui a été ajouté

    mvcBuilder.AddMvcOptions(options =>
        {
            options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
            options.InputFormatters.Add(new XmlDataContractSerializerInputFormatter(options));

Mvc a déjà un JsonOutputFormatter, donc à l'intérieur du AddMvcOptions vous pouvez l'obtenir et aussi et ajouter vos propres mediatypes personnalisés si vous en avez besoin.

var jsonOutputFormatter = options.OutputFormatters.OfType<JsonOutputFormatter>().FirstOrDefault();

        if (jsonOutputFormatter != null)
        {
            jsonOutputFormatter.SupportedMediaTypes.Add(HttpMediaTypes.Vnd+json.all);
            jsonOutputFormatter.SupportedMediaTypes.Add(HttpMediaTypes.ApplicationOctetStream);
        }
4
Zinov

Si j'ai bien compris, il n'y a pas encore de classe MvcJsonMvcCoreBuilderExtensions dans .NET Core 3.0.

Finalement, je viens d'ajouter -f paramètre lors de la création du projet Api:

dotnet new web -n Api -f netcoreapp2.2

au lieu de

dotnet new web -n Api

Il crée le projet Api pour .NET Core 2.2 afin que vous puissiez lire le didacticiel.

3
Mark Shevchenko