Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将Json格式化程序添加到MvcCore?_C#_Asp.net Core_Identityserver4 - Fatal编程技术网

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

C# 如何将Json格式化程序添加到MvcCore?,c#,asp.net-core,identityserver4,C#,Asp.net Core,Identityserver4,我正在执行下一个操作,但是我无法将方法AddJsonFormatters()调用到services.AddMvcCore()。 我目前正在从ASP.NET Core 3.0.0中的空模板配置API 我添加了NuGet包Microsoft.AspNetCore.Mvc.Formatters.Json,但没有结果。 另外,我知道使用AddMvc()而不是AddMvcCore()将是部分解决方案,但我不能在AddMvc()上使用AddAuthorization() 这是我在上面看到的错误消息: “IM

我正在执行下一个操作,但是我无法将方法
AddJsonFormatters()
调用到
services.AddMvcCore()
。 我目前正在从ASP.NET Core 3.0.0中的空模板配置API

我添加了NuGet包
Microsoft.AspNetCore.Mvc.Formatters.Json
,但没有结果。 另外,我知道使用
AddMvc()
而不是
AddMvcCore()
将是部分解决方案,但我不能在
AddMvc()上使用
AddAuthorization()

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

“IMvcCoreBuilder”不包含的定义 “AddJsonFormatters”和无可访问的扩展方法 “AddJsonFormatters”接受类型为的第一个参数 可以找到“IMVCoreBuilder”(您是否使用缺少的指令或 组件参考?)


这就是方法吗?我应该发送MVC重建器吗?我该怎么做

当您调用
services.AddMvc()
时,您会得到一个
IMvcBuilder

如果要添加更多输出或输入格式化程序,
IMvcBuilder
有一个扩展方法,您可以调用该扩展方法
AddMvcOptions
下面是添加的
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);
        }
var jsonOutputFormatter=options.OutputFormatters.OfType().FirstOrDefault();
if(jsonOutputFormatter!=null)
{
jsonOutputFormatter.SupportedMediaTypes.Add(HttpMediaTypes.Vnd+json.all);
jsonOutputFormatter.SupportedMediaTypes.Add(HttpMediaTypes.ApplicationActeTStream);
}

据我所知,在.NET Core 3.0中还没有类
MVCJSONMVCREBUILDEExtensions

最终,在创建Api项目时,我添加了
-f
参数:

dotnet new web -n Api -f netcoreapp2.2
而不是

dotnet new web -n Api

它为.NET Core 2.2创建了Api项目,因此您可以阅读教程。

我也遇到了同样的问题。我发现用当前版本的dotnetcore实现它的教程是错误的。阿诺扎肯的评论有助于:


再次检查教程,它已更新为NetCore3

查看教程页面上侧边栏的顶部。如果在IdentityServer4标题下显示“Release”,则该选项无效

侧边栏底部有一个下拉列表,您可以在其中选择“3.1”。

使用此选项:

If MVC

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews()
    .AddNewtonsoftJson(options =>
           options.SerializerSettings.ContractResolver =
              new CamelCasePropertyNamesContractResolver());
.....
.....

如果是API,请不要使用

 services.AddControllersWithViews().AddNewton ......

是的,我从pc上删除了sdk高于2.2的版本,这样它就可以用2.2构建一个新的
dotnet新web
project再次查看教程,它已经更新为NetCore3。简而言之,您不再需要
AddJsonFormatters()
,只需将其删除即可。
 services.AddControllersWithViews().AddNewton ......