Unable to resolve service for type 'Swashbuckle.AspNetCore.Swagger.ISwaggerProvider'

.net core项目集成Swagger后,可以在本地运行查看接口,但是部署到测试机的IIS之后,无法使用,导致应用程序启动不起来,一直报错:

ERROR|Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer|Connection ID "16212958664439370925", Request ID "800014ae-0001-e100-b63f-84710c7967bb": An unhandled exception was thrown by the application. System.InvalidOperationException: Unable to resolve service for type 'Swashbuckle.AspNetCore.Swagger.ISwaggerProvider' while attempting to Invoke middleware 'Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware'.
   at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.GetService(IServiceProvider sp, Type type, Type middleware)
   at lambda_method(Closure , Object , HttpContext , IServiceProvider )
   at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass4_1.b__2(HttpContext context)
   at Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Abp.AspNetCore.Security.AbpSecurityHeadersMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT`1.ProcessRequestAsync()

即:Unable to resolve service for type 'Swashbuckle.AspNetCore.Swagger.ISwaggerProvider' while attempting to Invoke middleware 'Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware'.

如果不注册Swagger,应用程序即可正常显示,但是为了让前端人员查看接口文档,还是需要进行配置Swagger,那如何解决?

原因:

IIS未配置全局的ASPNETCORE_ENVIRONMENT值,比如Development、Production环境变量。

解决方案一:

1、C:\Windows\System32\inetsrv\config\applicationHost.config  到部署的电脑,打开这个文件。

2、找到你部署的站点名称以及节点,比如: 

Unable to resolve service for type 'Swashbuckle.AspNetCore.Swagger.ISwaggerProvider'_第1张图片

3、添加节点,指明环境:


         
 

4、重启站点即可。

解决方案二:

通过配置编辑器,进行添加环境变量,可以参考如下:

Unable to resolve service for type 'Swashbuckle.AspNetCore.Swagger.ISwaggerProvider'_第2张图片

参考资料:https://stackoverflow.com/questions/31049152/publish-to-iis-setting-environment-variable

 

你可能感兴趣的:(C#)