目录

加载客户端应用程序设置

向客户端公开设置

从客户端获取设置


我通过ASP.NET宠坏了,希望应用程式设置能正常工作,但是客户端Blazor还没有一个容易配置的应用程序设置文章。我想要的是能够通过Azure应用服务应用程序设置在每个环境(dev/test/beta/prod)上设置一些设置。目标是一个构建工件,该工件在环境之间零变化地移动。

如果将Blazor应用程序托管为静态文件,则需要针对每个不同的环境更改应用程序设置文件。因此,我不再使用ASP.NET Core Web Hosted。我已将应用程序命名为AppSettingsExample,因此在解决方案中,我们拥有AppSettingsExample.Client(WASM应用程序),AppSettingsExample.Server(托管应用程序)和AppSettingExample.Shared(客户端与服务器之间共享的代码)

加载客户端应用程序设置

我们将通过AppSettingsExample.Server中的内置配置存储和访问客户端应用设置。为此,我们将添加如下appsettings.json值。

{"ClientAppSettings": {"BaseApiUrl": "http://somesite.com/api"}
}

我们还将在AppSettingsExample.Shared项目中创建一个类来保存这些配置。

public class ClientAppSettings
{public string BaseApiUrl { get; set; }
}

然后,在AppSettingsExample.Server的Startup中,我们将获得对应用程序配置的引用,并将其存储在本地变量中。

private readonly IConfiguration _configuration;public Startup(IConfiguration configuration)
{_configuration = configuration;
}

这使我们能够使用配置从appsettings.json中加载设置并将其作为单例添加到依赖项注入配置中。

public void ConfigureServices(IServiceCollection services)
{services.AddSingleton(_configuration.GetSection("ClientAppSettings").Get<ClientAppSettings>());

向客户端公开设置

没有简单的方法可以将设置传递到客户端Blazor应用程序中,因此我们需要该应用程序从服务器请求它们。我们将创建一个ClientAppSettingsController到AppSettingsExample.Server来提供这些设置。

[Route("api/[controller]")]
[ApiController]
public class ClientAppSettingsController : ControllerBase
{private readonly ClientAppSettings _clientAppSettings;public ClientAppSettingsController(ClientAppSettings clientAppSettings){_clientAppSettings = clientAppSettings;}[HttpGet]public ClientAppSettings GetClientAppSettings(){return _clientAppSettings;}
}

从客户端获取设置

这是我最麻烦的地方。在应用程序继续运行之前,我需要完全加载这些设置。如果我异步执行此操作,它将在设置加载完成之前开始在当前页面上运行初始化和ParameterSet方法。如果我试图通过调用.Wait()强制异步Web请求同步完成,则该应用程序将锁定。

为了解决这个问题,我们可以创建一个组件来加载设置,并在加载后显示其子内容。然后,我们可以将内容包装在此组件中,以确保在加载设置之前它不会开始初始化或设置参数。首先,我们创建AppSettingsLoader.razor

@using AppSettingExample.Shared
@inject HttpClient http@if (IsLoaded)
{@ChildContent
}@code
{[Parameter]public RenderFragment ChildContent { get; set; }public bool IsLoaded { get; set; }protected override async Task OnInitializedAsync(){await base.OnInitializedAsync();if (!IsLoaded){var appSettings = await http.GetJsonAsync<ClientAppSettings>("api/ClientAppSettings");AppSettings.BaseApiUrl = appSettings.BaseApiUrl;IsLoaded = true;}}
}

因为我们不能(或无法)将ClientAppSettings实例加载到依赖注入中,以使其在整个应用程序中可用,所以我只是将值放在静态类中。

现在,在MainLayout.razor中我们可以用AppSettingsLoader包装@body

<AppSettingsLoader>
@Body
</AppSettingsLoader>

最后,我们可以在Index.razor页面上引用AppSettings.BaseApiUrl。为了证明这一点,我将其显示在页面上。

@page "/"
<h1>Hello, world!</h1>@AppSettings.BaseApiUrl

现在我们可以在AppSettings.json的ClientAppSettings部分设置任何我们喜欢的设置,它将被视为一个普通的应用设置,包括能够通过Azure应用服务的配置部分设置设置。

客户端Blazor中的应用程序设置相关推荐

  1. w7运行里的计算机怎么设置,Win7系统中怎么给程序设置为开机启动项

    Win7系统中怎么给程序设置为开机启动项 腾讯视频/爱奇艺/优酷/外卖 充值4折起 我们在电脑上经常会用到的软件,是可以设置为开机启动项的,这样我们在开机之后,软件就自动运行,就很方便快捷啦.一起看看 ...

  2. Core 3.1中的应用程序设置如何在多环境场景中工作

    目录 介绍 背景 应用程序设置示例 使用代码 AppSettings.json AppSettings.dev.json AppSettings.Development.json AppSetting ...

  3. 店长宝微信小程序后台功能简介(四)——小程序设置

    本文参考自: 原文地址 继续为大家介绍店长宝微信小程序的后台功能,今天介绍后台中的小程序设置功能. 小程序设置功能:版权设置.个人中心.商家设置.商家手机端.小程序跳转.内嵌网页.门店管理.门面管理. ...

  4. 人脸识别客户端应用程序_如何在应用程序中使用功能识别设置人脸检测

    人脸识别客户端应用程序 by Rohit Ramname 由Rohit Ramname 如何在应用程序中使用功能识别设置人脸检测 (How you can set up face detection ...

  5. razor页面跳转_如何在Blazor中使用Razor页面创建单页应用程序

    razor页面跳转 In this article, we are going to create a Single Page Application (SPA) using Razor pages ...

  6. python客户端修改session_python中flask的Session设置的方法介绍

    本篇文章给大家带来的内容是关于python中flask的Session设置的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 什么是Session? cookie: 客户端浏览 ...

  7. outlook 未安装信息服务器,Outlook Web Access 未初始化并且在客户端访问服务器上的应用程序日志中记录了事件 ID 64...

    Outlook Web Access 未初始化并且在客户端访问服务器上的应用程序日志中记录了事件 ID 64 07/04/2014 本文内容 上一次修改主题: 2007-10-17 尝试访问 Micr ...

  8. 在Blazor中构建数据库应用程序——第3部分——UI中的CRUD编辑和查看操作

    目录 介绍 示例项目.代码和链接 基本表单 RecordFormBase EditRecordFormBase 实现表单 WeatherForecastViewerForm WeatherForeca ...

  9. 在Blazor中构建数据库应用程序——第1部分——项目结构和框架

    目录 介绍 存储库和数据库 设计理念 数据 UI 解决方案结构 界面结构 页面 路由视图 布局 表单 控件 Blazor.Database项目 Program.cs ServiceCollection ...

最新文章

  1. 网站内容优化时需注意哪些事项?
  2. 使用sealos安装K8S集群时,需确保节点的swap是关闭的
  3. 在基于nuxt的移动端页面中引用mint UI的popup组件之父子组件传值
  4. 一份非常完整的MySQL规范
  5. SEO你所不知道的!!SEO资源人脉才是王道
  6. Linux Dynamic Shared Library LD Linker
  7. creat-react-app 支持 less
  8. win2003负载均衡设置
  9. 马斯克如何通过生小孩统治世界?
  10. 字体设计师必备灵感来源
  11. Windows Server 2008域中组的简析
  12. 【Linux】sed命令用法详解
  13. 慕课软件质量保证与测试(第八章.软件评审概述)
  14. win10共享磁盘/硬盘提示“您没有权限访问,请与网络管理员联系请求访问权限”解决方案
  15. 如何手动启动消防广播_消防应急广播的设置要求是怎样的?
  16. ​电子投票系统与区块链
  17. 小米怎么快速回到顶部_拆解报告:小米小爱鼠标采用炬芯ATB110X蓝牙物联网方案 -...
  18. win7看视频卡顿或声音画面不同步的解决步骤
  19. mysql8多值索引(Multi-Valued Indexes)使用方法和性能测试
  20. 数据可视化之中国足球队在国际足联及亚洲的历史排名看这儿

热门文章

  1. 辰皇怎么过鸿蒙,诛仙3最厉害的职业是什么 强弱对应原因解析
  2. 友元函数可以访问私有成员吗_C++的友元函数和友元类
  3. linux 解压安卓内核,解压内核镜像
  4. 原生python自带的ide_python自带的IDE是一个功能强大的IDE
  5. cas无法使用_【漫画】CAS原理分析!无锁原子类也能解决并发问题!
  6. APP界面的数据可视化设计临摹学习模板
  7. mysql base_MySQLbase
  8. matlab求曲线极值程序,matlab函数求极值matlab函数求极值.ppt
  9. linux 误删除mysql表能恢复吗_linux rm误删除数据库文件的恢复方法
  10. 时间序列多步预测_使用LSTM深度学习模型进行温度的时间序列单步和多步预测...