首页
Coding .NET
取消

优化Gihub Action CI/CD Workflows with cache

container构建过程 Docker 镜像最好可视化为一层堆栈,其中每一层代表由 Dockerfile 中的指令产生的一组文件系统更改。每个层仅包含其之前层的更改。这确保了跨层数据不会重复。分层结构的一大优点是中间文件系统(层)可以在后续的 Docker 构建中重用。这种层的重用构成了 Docker 缓存的基础,并导致更快的增量构建,而不是总是从头开始构建镜像。 最好的 Dockerf...

掌握异步编程中的ConfigureAwait

理解ConfigureAwait ConfigureAwait是在异步编程中用于控制异步操作继续运行的上下文的方法。通过使用ConfigureAwait(true)或ConfigureAwait(false),开发人员可以指定异步操作的继续运行是否需要在原始上下文中执行,从而影响性能和避免潜在的死锁问题。 // 使用ConfigureAwait(true)示例 public async Ta...

首先去做,然后做对,再做得更好

先行动通往成功的旅程通常从迈出第一步开始,而这第一步可能是最难迈出的。很容易陷入对失败的恐惧或追求完美的欲望,但我希望这句我在2013年首次分享的引语能够提醒我们,在2024年开始时,开始行动的重要性。 随时随地开始 “如果必要,慢慢开始。如果必要,从小处开始。如果必要,私下开始。只要开始。” - 詹姆斯·克利尔 迈出第一步并不要求完美或立即掌握。关键是克服惯性,采取行动,因为这个行动将...

HttpClient的常用场景及问题分析

在一个.NET应用一般都需要通过HTTP调用一个外部API,在.NET中发送HTTP请求的简单方式是使用HttpClient,尤其是在支持JSON负载和响应的方法中,但在使用HttpClient很容易被误用。 每次请求创建一个新实例 public class GitHubService { private readonly GitHubSettings _settings; pub...

C# Delegate

委托是一项强大的功能,通过将方法封装为对象并进行传递,提供了代码的灵活性和可扩展性,使开发人员能过轻松实现松耦合、代码重用和异步执行,从而编写更高效和易于维护的代码。 委托静态方法 C#委托可用于调用静态方法和实例方法。在处理静态方法时,委托提供了一种封装方法并将其作为对象传递的方式。这样可以实现解耦并增强代码的可重用性。 在Delegates.cs中定义委托 StaticDelegate ...

C# Record 类型

record是一种引用类型,旨在简化和增强对不可变数据的建模和操作。C# 9引入了record type,csharp 10扩展了record增加了record struct,提供了一种更简洁、更强大的方式来处理数据。本文将深入探讨C#记录类型的背景、特性、record struct的特点和用法以及与传统类(class)的区别。 record的背景 在C#中,我们经常需要创建用于表示数据的...

Blazor WebAssembly 认证

Blazor WebAssembly 支持通过Microsoft.AspNetCore.Components.WebAssembly.Authentication库使用OIDC对应用进行身份验证和授权,出于以下功能和安全原因选择了以JWT)为基础的基于令牌的身份验证而不是基于cookie的身份验证 使用基于令牌的协议可以减小攻击面,因为并非所有请求中都会发送令牌 服务器终结点不要求...

Blazor 状态管理

Blazor Server是有状态的应用框架大多数情况下应用保持与服务器的连接,用户的状态保留在线路中的服务器内存中.在Blazor WebAssembly应用中创建的用户状态会保存在浏览器的内存中,那么在什么情况下保持用户状态,主要在以下情况下保持用户状态 呈现的 UI 中组件实例的层次结构及其最新的呈现输出 组件实例中的字段和属性的值 依赖关系注入 (DI) 服务实例中保留...

Blazor 模型绑定与校验

Blazor 框架支持 WebForm 并使用 EditForm 绑定到组件上进行模型验证。验证的过程则是:EditForm 基于分配的模型实例创建了EditContext,用作窗体中其他组件的EditForm。EditContext 跟踪有关编辑进程的元数据,其中包括已修改的字段和当前的验证消息;通过提供OnValidSubmit事件让其在提交含有效字段的窗体时运行处理窗体提交,OnInv...

Blazor 自定义组件

组件是在razor文件中C#和HTML标记的组合,组件文件名使用 Pascal 风格命名,在编译应用时HTML标记和C#呈现逻辑转换为组件类,生成的类的名称与文件名匹配。组件的@code块中主要处理 属性和字段初始化表达式。 由父组件和路由参数传递的自变量的参数值。 用于用户事件处理、生命周期事件和自定义组件逻辑的方法。 HTML标记和C#代码位于同一个文件中,也可以使用带有分...