Fork me on GitHub
摘要: 前一篇的跨域请求的方式是松宽的方式,毕竟跨域有安全风险,应尽量少的允许访问必要资源,本篇分别从请求方法,请求头和请求凭据方面了解跨域设置。 请求方法: api项目,get,post是默认访问,这里只设置了PUT允许访问 using Microsoft.AspNetCore.Cors; var bui 阅读全文
posted @ 2022-08-03 22:10 桂素伟 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 为了说明跨请求,创建了两个项目,一个mini api,端口是5001,另一个razor page项目,端口是5280。5280项目会在页面用ajax的方式来请求5001,形成跨域请求,由于是本地测试,host都是localhost,所以通过端口号不同,形成不同的域。 api项目 using Micr 阅读全文
posted @ 2022-08-03 22:02 桂素伟 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 程序员开发程序,是“生”的过程,运维人员负责日常运维,是“养”的过程,在养的过程,运维人员希望在第一时间了解程序的状况,健康检查,是最基础的手段。 var builder = WebApplication.CreateBuilder(args); //注入健康检查服务 builder.Service 阅读全文
posted @ 2022-07-27 21:43 桂素伟 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 说明:本篇重点说明MiniAPI引入EntityFramework,EF的使用不是本篇的重点 本篇是在MiniAPI中使用EntityFramework,所以先奉上创建数据的脚本,数据库是SQL Server,可能版本不同,会有一些问题,可以自行调整,这个脚本是基于SQL Server2019的。 阅读全文
posted @ 2022-07-27 21:31 桂素伟 阅读(59) 评论(0) 推荐(0) 编辑
摘要: .net开发体系里,大部分本地化的实现都是用资源文件实现(.resx),asp.net core中的多语Culture是指区域性的对象,而UICulture 该对象表示资源管理器在运行时查找区域性特定资源时所用的当前用户接口区域性。 asp.net core实现也是通过添注入本地化服务,和添加中间件 阅读全文
posted @ 2022-07-21 21:34 桂素伟 阅读(39) 评论(0) 推荐(0) 编辑
摘要: JWT不管是基于角色,还是自定义策略,实现的步骤都是大同小异的,基于自定义策略的步骤如下: 1、appsettings.json中配置JWT参 2、添加身份认证和授权服务和中间件,并设置为策略模式和策略名称 3、定义生成Token的方法和验证Toekn参数的方法 4、登录时验证身份并分发Toekn 阅读全文
posted @ 2022-07-21 21:29 桂素伟 阅读(64) 评论(0) 推荐(2) 编辑
摘要: 身份验证是这样一个过程:由用户提供凭据,然后将其与存储在操作系统、数据库、应用或资源中的凭据进行比较。 在授权过程中,如果凭据匹配,则用户身份验证成功,可执行已向其授权的操作。 授权指判断允许用户执行的操作的过程。也可以将身份验证理解为进入空间(例如服务器、数据库、应用或资源)的一种方式,而授权是用 阅读全文
posted @ 2022-07-21 21:23 桂素伟 阅读(56) 评论(0) 推荐(0) 编辑
摘要: 说明:本篇简单说一下日志中常用的几个点,关于日志,后面重点会说到三方日志提供程序 在MiniAPI中,可以通过方法或构造函数中,获取框架自动注入的日志类型,如下方式: app.MapGet("/test", (ILogger<Program> logger) => { logger.LogInfor 阅读全文
posted @ 2022-07-20 22:01 桂素伟 阅读(49) 评论(0) 推荐(0) 编辑
摘要: http协议,是由客户端发出请求,服务端响应结果并返回,我们把这个请求来回抽象成一个请求管道,那中间件就是这个管道上的阀门,控制着流量的进出和中断。每一个请求都要经过中间件的过滤,滤掉不合格的请求,放行合格的请求,比如用户验证,只有授权的用户通过,没有授权的用户挡在门外。 中间件的定义非常简单,如下 阅读全文
posted @ 2022-07-20 21:53 桂素伟 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 在OOP里有依赖倒置原则 (The Dependency Inversion Principle),意思是 高层模块不应该依赖于底层模块,二者都应该依赖于抽象。换句话说,依赖于抽象,不要依赖于具体实现。 如下图,在完成订单后要调用快送模块,这时就依赖快递模块的接口,而不是具体的快递模块。 依赖关系注 阅读全文
posted @ 2022-07-20 21:37 桂素伟 阅读(64) 评论(0) 推荐(1) 编辑
摘要: 首先声明,这不是写一个高性能应用的唯一选择,只是自己实践后的一些心得分享。 开发前定个小目标 有目标的好处是不会降配开发,也不会过度开发目标指标:并发数,TPS,响应时间等 1、模块独立性让路高性能: 在做业务模块逻辑时通盘考虑,必要时业务功模块的独立性要为高性能让路,比如对集合的操作,如果多个模块 阅读全文
posted @ 2022-07-20 21:25 桂素伟 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 选项是配置一个升级版,一般情况下是把一个范围内的配置包装成类型,以供使用,比如下面的RedisSetting,是Redis的配置参数: { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Wa 阅读全文
posted @ 2022-07-19 22:13 桂素伟 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 配置文件,是一个每个应用服务程序常用的功能,从原来的终端应用时代,到现在的元宇宙时代,配置都是很悠然自得的存在。asp.net core提供了强大的配置文件访问机制,不管是MVC API还是MiniAPI,使用方式都是相同的。 框架默认的配置文件是:appsettings.json,可以以json的 阅读全文
posted @ 2022-07-19 21:59 桂素伟 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 今天给大家分享.NET中的GraphQL,半个小时,没有把所有的代码敲出来,高估了自己的写码速度,所以通过这个文章分享出来。 1、核心PPT 2、主要代码 using Conf2021GraphQL; using Conf2021GraphQL.Models; using Microsoft.Ent 阅读全文
posted @ 2022-05-11 20:59 桂素伟 阅读(36) 评论(0) 推荐(0) 编辑
摘要: MiniAPI中,Response的返回数据有三种格式,IResult,string,json: ValueTask<string> - 这包括 string 和 Task<string> T(任何其他类型,返回前端时转成json)- 这包括 Task<T> 和 ValueTask<T> 基于 IR 阅读全文
posted @ 2022-05-11 20:53 桂素伟 阅读(76) 评论(0) 推荐(0) 编辑
摘要: switch的模式中有一种叫类型模式,可以根据switch的类型来执行对应的case,这点在代码中用到的比较频繁,特别是在对应同类型对象的操作中。本例是把一组数据,转成一种格式,就是很简单的使用switch类型模式实现,具体见代码: using System; using System.Collec 阅读全文
posted @ 2022-05-11 20:53 桂素伟 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 为了方便说明这个系列的文章,我引入了一个业务场景,就是一个简单的考试系统(仅作文章Demo案例),ER图见下图。1、系统有题库,试题有答案,分试题类型和试题类别;2、系统有考生用户,可以从题库组织试卷,分配给考生,考生可以考试记录考试结果。 app.MapGet("/", () => "Hello 阅读全文
posted @ 2022-05-11 20:44 桂素伟 阅读(107) 评论(0) 推荐(1) 编辑
摘要: Mini API之前的官方.net web框架,都是偏重的,不像其他语言,如go,python,或基于c#的nancy,都是简洁方式来开启web之旅的。所以有小伙伴就吐槽.net基于web的不友好性,这不,.net6中官方就引入了Mini API(虽然来的有点晚),以解这部分小伙伴的相思之痛。 va 阅读全文
posted @ 2022-05-11 20:36 桂素伟 阅读(196) 评论(0) 推荐(2) 编辑
摘要: 首先简化了Program文件,引入了全局命名空间,但顶级语句由于Main函数的特性[STAThread]没有引用进来。 namespace WinFormsDemo { internal static class Program { /// <summary> /// The main entry 阅读全文
posted @ 2022-05-11 20:29 桂素伟 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 在.net6发布时,带来了一个新的模板框架,mini api,那与之前的mvc api性能对比是什么样的呢? 建了基于.net 6的两种模板项目,都实现了一个get /test01的api请求,代码如下: mini api: app.MapGet("/test01", () => { var arr 阅读全文
posted @ 2022-04-27 15:31 桂素伟 阅读(62) 评论(0) 推荐(1) 编辑