簡體   English   中英

為什么 services.AddControllers().AddNewtonsoftJson() 使用.Net5核心拋出異常

[英]Why does services.AddControllers().AddNewtonsoftJson() throws exception using .Net5 core

當以下代碼執行行 services.AddControllers().AddNewtonsoftJson() 時出現問題,它會引發此異常,如果刪除該行,則服務執行得很好。

無法構造某些服務(驗證服務描述符“ServiceType:Microsoft.AspNetCore.Mvc.Infrastructure.IActionInvokerFactory Lifetime:Singleton ImplementationType:Microsoft.AspNetCore.Mvc.Infrastructure.ActionInvokerFactory”時出錯:“Microsoft.AspNetCore.Mvc.Infrastructure.ActionInvokerFactory”類型沒有構造函數。 AspNetCore.Mvc.Infrastructure.ControllerActionInvokerProvider' 可以使用來自服務容器和默認值的服務進行實例化。)(驗證服務描述符“ServiceType: Microsoft.AspNetCore.Mvc.Abstractions.IActionInvokerProvider Lifetime: Transient ImplementationType: Microsoft.AspNetCore. Mvc.Infrastructure.ControllerActionInvokerProvider':無法使用服務容器中的服務和默認值來實例化“Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvokerProvider”類型的構造函數。)(驗證服務描述符“ServiceType:Microsoft.AspNetCore”時出錯。 Mvc.Infrastructure.IActi onResultExecutor`1 [Microsoft.AspNetCore.Mvc.VirtualFileResult] 生命周期:Singleton 實施類型:Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor':嘗試激活“Microsoft.AspNetCore.Hosting.IWebHostEnvironment”時無法解析“Microsoft.AspNetCore.Hosting.IWebHostEnvironment”類型的服務。 AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor'。)(驗證服務描述符時出錯'ServiceType:Microsoft.AspNetCore.Mvc.Routing.MvcRouteHandler Lifetime:Singleton ImplementationType:Microsoft.AspNetCore.Mvc.Routing.MvcRouteHandler':沒有類型'的構造函數Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvokerProvider' 可以使用來自服務容器和默認值的服務進行實例化。)(驗證服務描述符'ServiceType: Microsoft.AspNetCore.Mvc.Routing.MvcAttributeRouteHandler Lifetime: Transient ImplementationType: Microsoft. AspNetCore.Mvc.Routing.MvcAttributeRouteH andler':不能使用服務容器中的服務和默認值來實例化“Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvokerProvider”類型的構造函數。)

我在.Net5 下運行並安裝了最新的 Microsoft.AspNetCore.Mvc.NewtonsoftJson package。 關於為什么 services.AddControllers().AddNewtonsoftJson() 會引發此錯誤的任何想法?

public static IHostBuilder CreateHostBuilder(string[] args)
{
    return Host.CreateDefaultBuilder(args)
        .UseWindowsService()
        .ConfigureServices((hostContext, services) =>
        {
            services.AddControllers().AddNewtonsoftJson(); 
            services.AddHostedService<Service>();
        }).UseSerilog();
}

安裝的軟件包:

Microsoft.AspNetCore.Mvc.NewtonsoftJson
Microsoft.Extensions.ApiDescription.Client
Microsoft.Extensions.Hosting
Microsoft.Extensions.Hosting.WindowsServices
NSwag.ApiDescription.Client
Serilog.AspNetCore
Serilog.Sinks.RollingFile
System.ServiceModel.Http
System.ServiceModel.Primitives

此問題與 Newtonsoft 擴展無關。

您需要導入 ASP.NET 核心框架才能使用控制器:

Microsoft.AspNetCore.Hosting;
Microsoft.Extensions.Hosting;

然后使用這個擴展方法:

Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        // ...
    });

您缺少 ASP.NET 核心運行時,因此它不知道如何處理控制器。

我強烈建議你做的(如果你想要控制器)是重新開始。 選擇項目類型時,選擇“ASP.NET Core Website”,然后選擇“Web API”作為網站類型。

這將為您提供運行控制器所需的一切。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM