Gre*_*egH 8 c# .net-core asp.net-core blazor
如何管理客户端blazor中不同环境之间不同的访问变量?通常,由于我使用Azure来发布应用程序,因此我会将appsettings.json
文件用于本地应用程序设置,然后在我的App Service的“ Azure应用程序设置”部分中为本地环境和其他环境之间的条目设置条目。
我要完成的示例:
客户端Blazor:
@functions {
//...more code here
await Http.PostJsonAsync<object>("http://localhost:50466/api/auth/register", vm);
}
Run Code Online (Sandbox Code Playgroud)
在已部署的Web服务器上,应将其转换为:
@functions {
//...more code here
await Http.PostJsonAsync<object>("http://wwww.mywebsite.com/api/auth/register", vm);
}
Run Code Online (Sandbox Code Playgroud)
因此,我正在寻找一种方法来将站点根URL存储在环境变量中,并在发布时对其进行转换。有没有Blazor-ey的方法可以做到这一点?
您可以使用配置接口创建单例并将其注入到您的组件中。
.csproj
<ItemGroup>
<EmbeddedResource Include="appsettings.Development.json" Condition="'$(Configuration)' == 'Debug'">
<LogicalName>appsettings.json</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="appsettings.json" Condition="'$(Configuration)' == 'Release'">
<LogicalName>appsettings.json</LogicalName>
</EmbeddedResource>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
启动.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton(GetConfiguration());
}
private IConfiguration GetConfiguration()
{
// Get the configuration from embedded dll.
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("appsettings.json"))
using (var reader = new StreamReader(stream))
{
return JsonConvert.DeserializeObject<IConfiguration>(reader.ReadToEnd());
}
}
Run Code Online (Sandbox Code Playgroud)
我的组件.razor
@inject Configuration.IConfiguration Configuration;
Run Code Online (Sandbox Code Playgroud)
或者看看这个问题
use 有多种方法可以做到这一点,
我相信还没有任何官方方法记录!
我的建议是使用好的旧方法,针对不同的环境使用多个配置文件,并仅复制要在预期环境中使用的配置文件。
在解决方案文件夹中创建一个名为env的文件夹。并创建名为dev和prod 的子文件夹。像下面这样。
|- env
|- dev
|- prod
|
Run Code Online (Sandbox Code Playgroud)
将不同的配置文件(具有相同名称和不同配置的文件)放入dev和prod文件夹中。
创建批处理文件以将适当的环境复制到wwwroot
文件夹。(我更喜欢这个而不是下一步,因为这对 CI 非常友好,不需要在构建服务器中安装 Visual Studio)
或者
将以下代码添加到Blazor项目post-build event
的
if $(ConfigurationName) == Debug (
copy /Y "$(ProjectDir)env\dev\*" "$(TargetDir)\wwwroot"
) ELSE (
copy /Y "$(ProjectDir)env\prod\*" "$(TargetDir)\wwwroot"
)
Run Code Online (Sandbox Code Playgroud)
由于您的配置文件位于 www 文件夹中,您可以通过打开该文件并阅读其中的内容,轻松地从 blazor 应用程序引用该文件。
归档时间: |
|
查看次数: |
604 次 |
最近记录: |