web-dev-qa-db-ja.com

JsonフォーマッターをMvcCoreに追加する方法

次の APIのIdentityServer4実装のチュートリアル に従っていますが、メソッドAddJsonFormatters()からservices.AddMvcCore()を呼び出すことができません。 ASP.NET Core 3.0.0で空のテンプレートからAPIを構成しています

結果なしでNuGetパッケージ_Microsoft.AspNetCore.Mvc.Formatters.Json_を追加しました。また、AddMvc()の代わりにAddMvcCore()を使用すると部分的な解決策になることを理解していますが、AddAuthorization()AddMvc()を使用できません

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

これは私が上記で見たエラーメッセージです:

「IMvcCoreBuilder」には「AddJsonFormatters」の定義が含まれておらず、タイプ「IMVCoreBuilder」の最初の引数を受け入れるアクセス可能な拡張メソッド「AddJsonFormatters」が見つかりませんでした(欠落しているディレクティブまたはアセンブリ参照を使用していますか?)

これは方法ですか? MVCCoreBuilderを送信する必要がありますか?それ、どうやったら出来るの? MvcJsonMvcCoreBuilderExtensions.AddJsonFormattersメソッド

9
poncho1plan

services.AddMvc()を呼び出すと、IMvcBuilderを取得します。

さらに出力または入力フォーマッターを追加する場合は、IMvcBuilderAddMvcOptionsを呼び出すことができる拡張メソッドがあり、追加されたXmlDataContractSerializerOutputFormatterの例がある

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

MvcにはすでにJsonOutputFormatterが含まれているため、AddMvcOptionsの中に取得して、必要に応じて独自のカスタムメディアタイプを追加することもできます。

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

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

私が理解したように、.NET Core 3.0にはクラスMvcJsonMvcCoreBuilderExtensionsはまだありません。

最終的に私は-fパラメータを作成したときApiプロジェクト:

dotnet new web -n Api -f netcoreapp2.2

の代わりに

dotnet new web -n Api

チュートリアルを読むことができるように、.NET Core 2.2のApiプロジェクトを作成します。

3
Mark Shevchenko