c# - 托管 Blazor 的 ConfigureServices 中的空 WebRootPath
问题描述
我想从Blazor.Server.Startup.ConfigureServices
Blazor 托管解决方案中访问 Web 根路径。
我已注入IWebHostEnvironment
构造Startup
函数并将其保存为名为“WebHostEnvironment”的属性。问题是在 ConfigureServices 中,WebHostEnvironment.WebRootPath
始终为空。
我已经验证了:
wwwroot
文件夹存在于我的 Blazor.Client 项目中。app.UseStaticFiles();
已被调用Startup.Configure
(不确定这是否有必要,但这是我发现的少数推荐解决方案之一)。
这似乎是一个常见问题(也许 WebRootPath 仅在某些条件下填充 - 例如在我的应用程序发布/部署之后?),但是我无法在任何地方找到明确、明确的答案,我不确定是什么我可以在ConfigureServices
.
用例
虽然与问题没有直接关系,但我正在尝试获取到我的令牌端点的路径,以便我可以TokenUrl
在新OpenApiAuthFlow
的 SwashbuckleAddSwaggerGen
服务中配置该属性。我宁愿不必指定 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
。
如果您想访问wwwroot文件夹,请将您的代码放入Configure
方法或方法中,ServiceCollection
您可以获得一个IServiceProvider
实例,例如.AddTransient
.
样本
services.AddTransient(p =>
{
var environment = p.GetRequiredService<IWebHostEnvironment>();
var path = environment.WebRootPath;
return new Stuff(path);
});
推荐阅读
- java - java中的Insert()节点方法?
- python - 在 Python 中,如何查看每列缺失值的百分比?
- r - 跟踪每个组内是否发生了事件
- exchangelib - Exchangelib:ItemAttachment 似乎从附件名称中去除了文件扩展名
- autocomplete - react-select 的辅助功能 ARIA 问题
- postgresql - PostgreSQL 中的条件计数记录
- jquery - 用于自定义文件大小检查器的 Jquery Validate Plugin addMethod
- three.js - 在 Harp-GL 地球仪上放置标记
- php - 带有下拉列表的表单不存储所选值
- python - 为什么在尝试使用 cx_freeze 冻结我的 python 应用程序时添加其他库时出现错误?