[英]How to retrieve the list of AspNetCore Mvc Filters (type of FilterCollection) used with services.AddControllers in startup.cs programmatically?
[英]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.