客户端Blazor中的应用程序设置
目录
加载客户端应用程序设置
向客户端公开设置
从客户端获取设置
我通过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中的应用程序设置相关推荐
- w7运行里的计算机怎么设置,Win7系统中怎么给程序设置为开机启动项
Win7系统中怎么给程序设置为开机启动项 腾讯视频/爱奇艺/优酷/外卖 充值4折起 我们在电脑上经常会用到的软件,是可以设置为开机启动项的,这样我们在开机之后,软件就自动运行,就很方便快捷啦.一起看看 ...
- Core 3.1中的应用程序设置如何在多环境场景中工作
目录 介绍 背景 应用程序设置示例 使用代码 AppSettings.json AppSettings.dev.json AppSettings.Development.json AppSetting ...
- 店长宝微信小程序后台功能简介(四)——小程序设置
本文参考自: 原文地址 继续为大家介绍店长宝微信小程序的后台功能,今天介绍后台中的小程序设置功能. 小程序设置功能:版权设置.个人中心.商家设置.商家手机端.小程序跳转.内嵌网页.门店管理.门面管理. ...
- 人脸识别客户端应用程序_如何在应用程序中使用功能识别设置人脸检测
人脸识别客户端应用程序 by Rohit Ramname 由Rohit Ramname 如何在应用程序中使用功能识别设置人脸检测 (How you can set up face detection ...
- razor页面跳转_如何在Blazor中使用Razor页面创建单页应用程序
razor页面跳转 In this article, we are going to create a Single Page Application (SPA) using Razor pages ...
- python客户端修改session_python中flask的Session设置的方法介绍
本篇文章给大家带来的内容是关于python中flask的Session设置的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 什么是Session? cookie: 客户端浏览 ...
- outlook 未安装信息服务器,Outlook Web Access 未初始化并且在客户端访问服务器上的应用程序日志中记录了事件 ID 64...
Outlook Web Access 未初始化并且在客户端访问服务器上的应用程序日志中记录了事件 ID 64 07/04/2014 本文内容 上一次修改主题: 2007-10-17 尝试访问 Micr ...
- 在Blazor中构建数据库应用程序——第3部分——UI中的CRUD编辑和查看操作
目录 介绍 示例项目.代码和链接 基本表单 RecordFormBase EditRecordFormBase 实现表单 WeatherForecastViewerForm WeatherForeca ...
- 在Blazor中构建数据库应用程序——第1部分——项目结构和框架
目录 介绍 存储库和数据库 设计理念 数据 UI 解决方案结构 界面结构 页面 路由视图 布局 表单 控件 Blazor.Database项目 Program.cs ServiceCollection ...
最新文章
- 网站内容优化时需注意哪些事项?
- 使用sealos安装K8S集群时,需确保节点的swap是关闭的
- 在基于nuxt的移动端页面中引用mint UI的popup组件之父子组件传值
- 一份非常完整的MySQL规范
- SEO你所不知道的!!SEO资源人脉才是王道
- Linux Dynamic Shared Library LD Linker
- creat-react-app 支持 less
- win2003负载均衡设置
- 马斯克如何通过生小孩统治世界?
- 字体设计师必备灵感来源
- Windows Server 2008域中组的简析
- 【Linux】sed命令用法详解
- 慕课软件质量保证与测试(第八章.软件评审概述)
- win10共享磁盘/硬盘提示“您没有权限访问,请与网络管理员联系请求访问权限”解决方案
- 如何手动启动消防广播_消防应急广播的设置要求是怎样的?
- ​电子投票系统与区块链
- 小米怎么快速回到顶部_拆解报告:小米小爱鼠标采用炬芯ATB110X蓝牙物联网方案 -...
- win7看视频卡顿或声音画面不同步的解决步骤
- mysql8多值索引(Multi-Valued Indexes)使用方法和性能测试
- 数据可视化之中国足球队在国际足联及亚洲的历史排名看这儿
热门文章
- 辰皇怎么过鸿蒙,诛仙3最厉害的职业是什么 强弱对应原因解析
- 友元函数可以访问私有成员吗_C++的友元函数和友元类
- linux 解压安卓内核,解压内核镜像
- 原生python自带的ide_python自带的IDE是一个功能强大的IDE
- cas无法使用_【漫画】CAS原理分析!无锁原子类也能解决并发问题!
- APP界面的数据可视化设计临摹学习模板
- mysql base_MySQLbase
- matlab求曲线极值程序,matlab函数求极值matlab函数求极值.ppt
- linux 误删除mysql表能恢复吗_linux rm误删除数据库文件的恢复方法
- 时间序列多步预测_使用LSTM深度学习模型进行温度的时间序列单步和多步预测...