【发布时间】:2020-07-09 03:25:59
【问题描述】:
我想在 Blazor 托管解决方案中从 Blazor.Server.Startup.ConfigureServices 访问 Web 根路径。
我已将IWebHostEnvironment 注入Startup 构造函数并将其保存为名为“WebHostEnvironment”的属性。问题是在 ConfigureServices 中,WebHostEnvironment.WebRootPath 始终为空。
我已经验证过:
-
wwwroot文件夹存在于我的 Blazor.Client 项目中。 -
app.UseStaticFiles();已在Startup.Configure中调用(不确定这是否有必要,但这是我找到的少数推荐解决方案之一)。
这似乎是一个常见问题(也许 WebRootPath 仅在某些条件下填充 - 例如在我的应用程序发布/部署之后?),但是我无法在任何地方找到明确、明确的答案,我不知道我能做些什么来获取ConfigureServices 中的网络根路径。
用例
虽然与问题没有直接关系,但我正在尝试获取令牌端点的路径,以便我可以在新的 OpenApiAuthFlow 中为 Swashbuckle 的 AddSwaggerGen 服务配置 TokenUrl 属性。我宁愿不必指定 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"}
}
}
}
});
});
【问题讨论】:
-
好的,谢谢。如果在
ConfigureServices中无法获取WebRootPath,我会通过从配置中加载路径来做类似的事情。 -
我不这么认为,但是您实际上要加载哪个配置文件?如果您尝试从服务器端加载客户端配置文件,这是可能的,但需要更多代码。
标签: c# asp.net-core blazor