随笔分类 -  ASP.NET Core

分享最有用的 ASP.NET Core 技巧。
摘要:一个多月前接手了一个产线机器人项目,上位机以读写寄存器的方式控制机器人,服务器就是用 ASP.NET Core 写的 Web API。由于前一位开发者写的代码质量问题,导致上位机需要16秒才能启动。经过我近一个月的改造,除了保留业务逻辑代码,其他的基本重写。如今上位机的启动时间在网络状态良好的条件下 阅读全文
posted @ 2024-01-01 13:01 东邪独孤 阅读(2816) 评论(7) 推荐(14) 编辑
摘要:前面老周给大伙伴们演示了过滤器的运行流程,大伙只需要知道下面知识点即可: 1、过滤器分为授权过滤、资源访问过滤、操作方法(Action)过滤、结果过滤、异常过滤、终结点过滤。上一次咱们没有说异常过滤和终结点过滤,不过老周后面会说的。对这些过滤器,你有印象就行了。 2、所有过滤器接口都有同步版本和异步 阅读全文
posted @ 2023-12-02 22:32 东邪独孤 阅读(583) 评论(0) 推荐(2) 编辑
摘要:MVC 的过滤器(Filters)也翻译为“筛选器”。但是老周更喜欢翻译为“过滤器”,意思上更好理解。 既然都叫过滤器了,就是在MVC的操作方法调用前后进行特殊处理的类型。比如: a、此调用是否已授权? b、在模型绑定之前要不要修改数据源?(可能含有儿童不宜的数据) c、在调用MVC方法前要不要改一 阅读全文
posted @ 2023-11-26 11:40 东邪独孤 阅读(1770) 评论(0) 推荐(9) 编辑
摘要:由于 Blazor-WebAssembly 是在浏览器中运行的,通常不需要执行服务器代码,只要有个“窝”能托管并提供相关文件的下载即可。所以,当你有一个现成的 Blazor wasm 项目,没必要用其他语言重写,或者你不想用 ASP.NET Core 来托管(有些大材小用了),就可以试试用 node 阅读全文
posted @ 2023-03-21 23:23 东邪独孤 阅读(477) 评论(3) 推荐(1) 编辑
摘要:Blazor Server,即运行在服务器上的 Blazor 应用程序,它的优点是应用程序在首次运行时,客户端不需要下载运行时。但它的代码是在服务器上执行的,然后通过 SignalR 通信来更新客户端的 UI,所以它要求必须建立 Web Socket 连接。 用于 Blazor 应用的 Signal 阅读全文
posted @ 2023-03-11 18:32 东邪独孤 阅读(747) 评论(0) 推荐(1) 编辑
摘要:标记帮助器不仅可以给目标元素(标记)插入(或修改)属性,插入自定义的HTML内容,在某些需求中还可以替换原来标记的名称。 比如我们在使用 Blazor 时很熟悉的 Component 标记帮助器。在 Razor 文档中你将使用 <Component> 元素来设置要呈现的组件。而在实际处理时,会去掉 阅读全文
posted @ 2023-02-26 19:34 东邪独孤 阅读(1434) 评论(4) 推荐(6) 编辑
摘要:前一篇中老周从标记帮助的底层介绍关键性的接口,如 ITagHelper ,它是一个标志,用于识别哪些类属于 Tag Helper。 标记帮助器毕竟是针对 HTML 标记的,所以得筛选。说白了就是我写的这个帮助器在哪些 HTML 标记上起作用。这就需要拿出一个特性类。 [AttributeUsage( 阅读全文
posted @ 2023-02-19 17:12 东邪独孤 阅读(262) 评论(0) 推荐(3) 编辑
摘要:标记帮助器,即 Tag Helpers。这个嘛,就直接翻译了,叫“标记帮助器”,虽然不好听,但只能这样了。当然你翻译为“标记增强器”也行。 所谓标记帮助器,就是针对 HTML 标签(不管是标准的还是自己命名的)进行扩展的做法。它是以 Razor 为基础的,服务于开发人员的。在服务器端用 C# 代码来 阅读全文
posted @ 2023-02-18 19:06 东邪独孤 阅读(348) 评论(0) 推荐(3) 编辑
摘要:ASP.NET Core 中的几大功能模块(Razor Pages、MVC、SignalR/Blazor、Mini-API 等等)都以终结点(End Point)的方式公开。在HTTP管道上调用时,其扩展方法基本是以 Map 开头,如 MapControllers、MapBlazorHub。 对于 阅读全文
posted @ 2023-01-29 13:03 东邪独孤 阅读(1404) 评论(0) 推荐(5) 编辑
摘要:在开始之前,老周先祝各个次元的伙伴们新春快乐、生活愉快、万事如意。 在上一篇水文中,老周介绍了角色授权的一些内容。本篇咱们来聊一个比较实际的问题——把用于授权的角色名称放到外部配置,不要硬编码,以方便后期修改。 由于要配置的东西比较简单,咱们并不需要存在数据库,而是用 JSON 文件配置就可以了。将 阅读全文
posted @ 2023-01-23 16:51 东邪独孤 阅读(1118) 评论(1) 推荐(4) 编辑
摘要:上次老周和大伙伴们分享了有关按用户Level授权的技巧,本文咱们聊聊以用户角色来授权的事。 按用户角色授权其实更好弄,毕竟这个功能是内部集成的,多数场景下我们不需要扩展,不用自己写处理代码。从功能语义上说,授权分为按角色授权和按策略授权,而从代码本质上说,角色权授其实是包含在策略授权内的。怎么说呢? 阅读全文
posted @ 2023-01-14 18:06 东邪独孤 阅读(1971) 评论(6) 推荐(12) 编辑
摘要:验证和授权是两个独立但又存在联系的过程。验证是检查访问者的合法性,授权是校验访问者有没有权限查看资源。它们之间的联系——先验证再授权。 贯穿这两过程的是叫 Claim 的东东,可以叫它“声明”。没什么神秘的,就是由两个字符串组成的对象,一曰 type,一曰 value。type 和 value 有着 阅读全文
posted @ 2023-01-04 13:03 东邪独孤 阅读(3406) 评论(10) 推荐(24) 编辑
摘要:咱们都知道,MVC在输入/输出中都需要模型绑定。因为HTTP请求发送的都是文本,为了使其能变成各种.NET 类型,于是在填充参数值之前需 ModelBinder 的参与,以将文本转换为 .NET 类型。 尽管 ASP.NET Core 已内置基础类型和复杂类型的各种 Binder,但有些数据还是不能 阅读全文
posted @ 2022-12-18 18:04 东邪独孤 阅读(1667) 评论(2) 推荐(9) 编辑
摘要:IActionHttpMethodProvider 接口的结构很简单,实现该接口只要实现一个属性即可——HttpMethods。该属性是一个字符串序列。 这啥意思呢?这个字符串序列代表的就是受支持的 HTTP 请求方式。比如,如果此属性返回 GET POST,那么被修饰的对象既支持 HTTP-GET 阅读全文
posted @ 2022-12-11 12:45 东邪独孤 阅读(522) 评论(0) 推荐(3) 编辑
摘要:MVC的路由规则配置方式比较多,咱们用得最多的是两种: A、全局规则。就是我们熟悉的”{controller}/{action}“。 app.MapControllerRoute( name: "bug", pattern: "{controller}/{action}" ); app.MapCon 阅读全文
posted @ 2022-12-01 18:00 东邪独孤 阅读(2692) 评论(2) 推荐(15) 编辑
摘要:在上一篇中,老周演示了通过实现约定接口的方式自定义控制器的名称。 至于说自定义操作方法的名称,就很简单了,因为有内置的特性类可以用。看看下面的例子。 [Route("[controller]/[action]")] public class StockController : Controller 阅读全文
posted @ 2022-11-19 10:42 东邪独孤 阅读(990) 评论(4) 推荐(3) 编辑
摘要:从本篇起,老周会连发N篇水文,总结一下在 MVC 项目中控制器的各种自定义配置。 本文内容相对轻松,重点讨论一下 MVC 项目中的各种约定接口。毕竟你要对控制器做各种自定义时,多数情况会涉及到约定接口。约定接口的结构都差不多,均包含一个 Apply 方法,实现类需要通过这个方法修改关联的模型设置。 阅读全文
posted @ 2022-11-13 17:53 东邪独孤 阅读(786) 评论(1) 推荐(3) 编辑
摘要:在开始今天的表演之前,老周先跟大伙伴们说一句:“中秋节快乐”。 今天咱们来聊一下如何自己动手,实现会话(Session)的存储方式。默认是存放在分布式内存中。由于HTTP消息是无状态的,所以,为了让服务器能记住用户的一些信息,就用到了会话。但会话数据毕竟是临时性的,不宜长久存放,所以它会有过期时间。 阅读全文
posted @ 2022-09-10 18:39 东邪独孤 阅读(1552) 评论(0) 推荐(2) 编辑
摘要:今天咱们来扯一下 Blazor 应用程序怎么访问 HttpContext。其实这句话有坑,为了避免大伙伴们掉茅坑,老周直接说明:Blazor 是不能访问 HttpContext 的。哪怕你在服务容器中注册了 IHttpContextAccessor 也不行,无法返回有效的上下文。 为啥?这得从 Bl 阅读全文
posted @ 2022-09-04 11:20 东邪独孤 阅读(1598) 评论(0) 推荐(4) 编辑
摘要:咱们继续上一个话题。先简单复习一下,根据老周前面文章的介绍,选项类体系的基本套路是通过 IOptionsFactory 来创建选项类实例的。而我们在服务容器(IServiceCollection)上是用Configure、PostConfigure 等扩展方法去配置选项类的(设置属性的值)。配置代码 阅读全文
posted @ 2022-07-30 10:39 东邪独孤 阅读(918) 评论(1) 推荐(2) 编辑