如何将 Json 格式化程序添加到 MvcCore?

pon*_*lan 10 c# asp.net-core identityserver4

我正在关注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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在上面看到的错误消息:

“IMvcCoreBuilder”不包含“AddJsonFormatters”的定义,并且找不到接受“IMVCoreBuilder”类型的第一个参数的可访问扩展方法“AddJsonFormatters”(您使用的是缺少的指令还是程序集引用?)

这是方法吗?我应该发送 MVCCoreBuilder 吗?我怎么做?MvcJsonMvcCoreBuilderExtensions.AddJsonFormatters 方法

Zin*_*nov 6

当你打电话时,services.AddMvc()你会得到一个IMvcBuilder.

如果你想添加更多的输出或输入格式化程序,它IMvcBuilder有一个你可以调用的扩展方法,AddMvcOptions你有一个XmlDataContractSerializerOutputFormatter被添加的例子

    mvcBuilder.AddMvcOptions(options =>
        {
            options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
            options.InputFormatters.Add(new XmlDataContractSerializerInputFormatter(options));
Run Code Online (Sandbox Code Playgroud)

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);
        }
Run Code Online (Sandbox Code Playgroud)