托管的Blazor的ConfigureServices中的Null WebRootPath

时间:2020-07-09 03:25:59

标签: c# asp.net-core blazor

我想从Blazor托管解决方案的Blazor.Server.Startup.ConfigureServices内部访问Web根路径。

我已将IWebHostEnvironment注入到Startup构造函数中,并将其保存为名为“ WebHostEnvironment”的属性。问题在于,在ConfigureServices中,WebHostEnvironment.WebRootPath始终为空。

我已经确认:

  • wwwroot文件夹存在于我的Blazor.Client项目中。
  • app.UseStaticFiles();Startup.Configure中被调用(不确定是否有必要,但这是我找到的少数推荐解决方案之一)。

这似乎是一个常见问题(也许WebRootPath仅在某些条件下填充-例如在发布/部署我的应用程序之后?),但是我一直无法在任何地方找到明确的明确答案,不知道该怎么做才能在ConfigureServices中获得Web根路径。

用例

虽然与问题没有直接关系,但我正在尝试获取令牌端点的路径,以便可以在Swashbuckle的TokenUrl的新OpenApiAuthFlow中配置AddSwaggerGen属性}服务。我希望不必指定localhost URL,因为它将最终部署到生产网站。我想我可以根据需要将其存储在appsettings中,但是我希望不必在此保留路径。

services.AddSwaggerGen(options =>
    {
        options.SwaggerDoc("v1", new OpenApiInfo {Title = "Protected API", Version = "v1"});
        options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
        {
            Type = SecuritySchemeType.OAuth2,
            Flows = new OpenApiOAuthFlows
            {
                AuthorizationCode = new OpenApiOAuthFlow
                {
                    AuthorizationUrl = new Uri("https://localhost:5000/connect/authorize"),
                    TokenUrl = new Uri("https://localhost:5000/connect/token"),
                    Scopes = new Dictionary<string, string>
                    {
                        {"api1", "Demo API - full access"}
                    }
                }
            }
        });
    });

1 个答案:

答案 0 :(得分:0)

这不是错误,而是功能。您只是无法在ConfigureServices中做您想做的事情。
如果要访问 wwwroot 文件夹,请将代码放入Configure方法或ServiceCollection方法中,则可以获取IServiceProvider实例,例如{{ 1}}。

样本

.AddTransient