.NET Core

ASP.NET Core on K8S学习之旅(13)Ocelot API网关接入

北城余情 提交于 2020-08-11 07:09:27
本篇已加入《 .NET Core on K8S学习实践系列文章索引 》,可以点击查看更多容器化技术相关系列文章。 上一篇 介绍了Ingress的基本概念和Nginx Ingress的基本配置和使用,考虑到很多团队都在使用Ocelot作为API网关(包括我司)做了很多限流和鉴权的工作,因此本篇介绍一下如何使用Ocelot接入替代Nginx Ingress作为统一入口。 一、准备工作   我们仍然以上一篇的两个ASP.NET Core WebAPI示例作为K8s集群中的后端服务示例,这里我们来快速地准备一个基于Ocelot的API网关服务。   至于怎么创建Ocelot API网关,已经有很多文章介绍了,这里就不再赘述。需要注意的步骤有以下几点:   (1)根据Ocelot的版本引入匹配的K8s Provider:   可以看到,这个Provider包是 张队 写的,目前已经支持.NET Core 3.1,最新版本是15.0.6。这里我选择的是13.5.2,因为我的API网关服务还是.NET Core 2.2的版本。 KubeClient是kubernetes 的C#语言客户端简单易用,KubeClient是.NET Core(目标netstandard1.4)的可扩展Kubernetes API客户端, github地址 点击这里

Asp .Net Core 2.0 登录授权以及多用户登录

喜欢而已 提交于 2020-08-11 07:09:13
原文: Asp .Net Core 2.0 登录授权以及多用户登录 用户登录是一个非常常见的应用场景 .net core 2.0 的登录方式发生了点变化,应该是属于是良性的变化,变得更方便,更容易扩展。 配置 打开项目中的Startup.cs文件,找到 ConfigureServices 方法,我们通常在这个方法里面做依赖注入的相关配置。添加如下代码: public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, o => { o.LoginPath = new PathString("/Account/Login"); o.AccessDeniedPath = new PathString("/Error/Forbidden"); }); } 这段代码的大概意思就是,添加授权支持,并添加使用Cookie的方式,配置登录页面和没有权限时的跳转页面。 再找到 Configure 方法,添加 app.UseAuthentication(),使用授权:

作为程序员的我只负责修复旧bug制造新bug

喜夏-厌秋 提交于 2020-08-11 06:41:12
不知道什么时候开始写的这网站 ttblog ,只知道当时是一腔的激情,可是到今日,激情没了。可谓是古人云:“茅坑的屎香三天!” 记得当时刚毕业参加工作,可以熟练的写出各种CRUD代码,譬如循环里写满了数据库操作,但是这并不影响我的自恋感:“我是一名技术大牛,什么样的功能都能实现”并且这个代码好像一直用到现在。可是直到有一天,我手贱的加入了一个研究微服务的群里,让后我发现他们聊得我并听不懂,我原来一直活在自己的世界里,记得当时连.net core都不知是什么玩意。作为一名“资深”的.net程序员太不应该了,于是我便开始了.net core学习之路,于是便诞生了这个网站。 时到今日,已经没有了当初的激情了,可能是代码写的写的太烂了,没有维护下去的动力了。说到烂代码,我就想到了一个问题,为什么会有烂代码,可能最开始高贵的甲方爸爸只有这一个简单要求,于是写了一个简单的功能,后来又有需求变更,于是加一小段代码,此时的心里“代码看上去还行,简洁优雅”,过了一段时间,这个功能又变需求了,又加了一段代码,此时想的是“下次再改需求就要从新设计下了”,此时代码已经有点乱了。可是,过了一段时间来了一位新人,这个需求又变更了,但是交给了新人,新人看了一段代码表示“卧槽,好sb的代码,谁写的,不管了”,于是又加了一段代码,以此类推,最后代码可能就是一坨屎山了。后来的人谁也不想去挖这个坨山,因为每个人都表示

.Net Core如何在程序的任意位置使用和注入服务

南笙酒味 提交于 2020-08-11 05:48:35
原文: .Net Core如何在程序的任意位置使用和注入服务 最近有人问我:我该如何在Startup类之外的地方注入我的服务呢,都写在startup里看着好乱;我该如何在程序的其他地方获取我注入的服务呢; 故我写了这篇博客,文中有不对的地方欢迎指正。 一、如何在Stratup类外注入服务 首先,我们看startup类的ConfigureServices方法,我们会发现我们所有的服务都是使用IServiceCollection注入进去的 所以我们在其他地方进行注入依然是使用这个接口进行注入,话不多说,上源码 我们首先定义一个静态类,然后在静态类内写一个IServiceCollection的扩展方法,这样我们就可以在这进行和startup里一样注入了。 public static class ServiceConfiguration { public static IServiceCollection ConfigServies( this IServiceCollection service) { service.AddTransient <INavigation, NavigationLogic> (); service.AddTransient <IUserInfo, UserInfoLogic> (); return service; } } 静态类写完后

让.NetCore程序跑在任何有docker的地方

时光怂恿深爱的人放手 提交于 2020-08-11 04:49:56
一.分别在Windows/Mac/Centos上安装Docker Windows上下载地址: https://docs.docker.com/docker-for-windows/install/ (window上安装的常见问题和解决方案请参考下方步骤六) Mac上下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-mac Centos上安装Docker请参考我上篇文章链接: https://www.cnblogs.com/peyshine/p/12915317.html 二.打开vs 新建一个Web程序 这里选择启动docker支持,主要是为了能够自动生成dockerfile文件,如果忘记勾选了也没关系,也可以右键解决方案,点击‘添加’,选择‘docker支持’,vs也会自动为我们生成dockerfile,大概长这个样子 对dockerfile文件解释说明: 1.FROM 通过FROM指令来设置要制作的镜像基于哪个镜像,FROM指令必须是整个Dockerfile的第一个指令,如果指定的镜像不存在默认会自动从Docker Hub上进行拉取 2.WORKDIR 通过workdir指令用于设置Dockerfile中的RUN、CMD和ENTRYPOINT指令执行命令的工作目录(默认为/目录)

.Net Core实战之基于角色的访问控制的设计

对着背影说爱祢 提交于 2020-08-11 03:07:13
前言   上个月,我写了两篇微服务的文章:《 .Net微服务实战之技术架构分层篇 》与《 .Net微服务实战之技术选型篇 》,微服务系列原有三篇,当我憋第三篇的内容时候一直没有灵感,因此先打算放一放。   本篇文章与源码原本打算实在去年的时候完成并发布的,然而我一直忙于公司项目的微服务的实施,所以该篇文章一拖再拖。如今我花了点时间整理了下代码,并以此篇文章描述整个实现思路,并开放了源码给予需要的人一些参考。   源码: https://github.com/SkyChenSky/Sikiro.RBAC RBAC   Role-Based Access Contro翻译成中文就是 基于角色的访问控制 ,文章以下我都用他的简称 RBAC 来描述。   现信息系统的 权限控制 大多数采取RBAC的思想进行实现,其 本质思想 是对系统各种的操作权限不是直接授予具体的某个用户,而是在用户集合与权限集合之间建立一个角色,作为 间接 关联。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限。   通过以上的描述,我们可以分析出以下信息:   用户与权限是通过角色间接关联的   角色的本质就是权限组(权限集合)   这样做的好处在于,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多

允许自定义签名的显示!Stimulsoft Ultimate v2020.3.2修复性更新升级!| 附下载

微笑、不失礼 提交于 2020-08-11 03:03:36
Stimulsoft Ultimate 是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。 无需比较产品功能,Stimulsoft Ultimate包含了共9种产品! 包括Windows Forms,ASP.NET,.NET Core,JavaScript,WPF,PHP,Java等平台。 Stimulsoft Dashboards.JS Stimulsoft Dashboards.WEB Stimulsoft Dashboards.WIN Stimulsoft Reports.Java Stimulsoft Reports.Net Stimulsoft Reports.PHP Stimulsoft Reports.Wpf Stimulsoft Reports.Web Stimulsoft Reports.JS Stimulsoft Reports.Ultimate不仅拥有强大的报表导出系统,而且还支持多种报表导出格式,拥有简单且强大的报表引擎。Stimulsoft Reports.Ultimate基本原则是,用简单常规的方法创建报表,将不同的技术应用于应用程序。 近日,Stimulsoft Ultimate 更新至v2020.3.2

【翻译】.NET 5中的性能改进

老子叫甜甜 提交于 2020-08-11 02:57:45
【翻译】.NET 5中的性能改进 在.NET Core之前的版本中,其实已经在博客中介绍了在该版本中发现的重大性能改进。 从.NET Core 2.0到.NET Core 2.1到.NET Core 3.0的每一篇文章,发现 谈论越来越多的东西。 然而有趣的是,每次都想知道下一次是否有足够的意义的改进以保证再发表一篇文章。 .NET 5已经实现了许多性能改进,尽管直到今年秋天才计划发布最终版本,并且到那时很有可能会有更多的改进,但是还要强调一下,现在已提供的改进。 在这篇文章中,重点介绍约250个PR,这些请求为整个.NET 5的性能提升做出了巨大贡献。 安装 Benchmark.NET现在是衡量.NET代码性能的规范工具,可轻松分析代码段的吞吐量和分配。 因此,本文中大部分示例都是使用使用该工具编写的微基准来衡量的。首先创建了一个目录,然后使用dotnet工具对其进行了扩展: mkdir Benchmarks cd Benchmarks dotnet new console 生成的Benchmarks.csproj的内容扩展为如下所示: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>

闲谈设计模式

前提是你 提交于 2020-08-11 02:54:25
闲谈设计模式 Intro 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 了解这些前辈们总结出来的经验有助于帮助你写出来更优秀的代码,帮助你写出可扩展、可读、可维护的高质量代码。 在极客时间里推出了数据结构和设计模式的王争说了一句话,如果说“数据结构与算法之美”是教你写出高效的代码,那设计模式就是教你写出高质量的代码。 为什么要学习设计模式 提升自己代码质量,告别写被人吐槽的烂代码 提高复杂代码的设计和开发能力,设计出扩展性良好,可维护性更强,可复用性更好的代码 让读源码、学框架事半功倍,学会设计模式,在看框架源码的时候会更好的理解框架中的一些功能设计 为你的职场发展做铺垫,提升自己 code review 能力,把控团队代码质量 设计模式设计原则 设计原则是指导我们代码设计的一些经验总结,对于每一种设计原则,我们需要掌握它的设计初衷,能解决哪些编程问题,有哪些应用场景。只有这样,我们才能在项目中灵活恰当地应用这些原则。 单一职责原则 对于一个类而言,应该仅有一个引起它变化的原因 如果一个类承担的职责过多,就等于把这些职责耦合再一起,一个职责的变化可能会削弱或者抑制这个类完全其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。 开放-封闭原则 开放-封闭原则是说软件实体(类、模块、函数等等

基于 abp vNext 和 .NET Core 开发博客项目

拟墨画扇 提交于 2020-08-11 02:29:59
上一篇文章( https://www.cnblogs.com/meowv/p/12956696.html )成功使用了Redis缓存数据,大大提高博客的响应性能。 接下来,将完成一个任务调度中心,关于定时任务有多种处理方式,如果你的需求比较简单,比如就是单纯的过多少时间循环执行某个操作,可以直接使用.net core中内置的实现方式,新建一个类继承 BackgroundService ,实现 ExecuteAsync() 既可。 看一个例子,我们每过一秒输出一句HelloWorld,并写入日志中。 在 .BackgroundJobs 中新建一个Jobs文件夹,添加 HelloWorldJob.cs ,并且继承自 BackgroundService 。 //HelloWorldJob.cs using log4net; using Microsoft.Extensions.Hosting; using System; using System.Threading; using System.Threading.Tasks; namespace Meowv.Blog.BackgroundJobs.Jobs { public class HelloWorldJob : BackgroundService { private readonly ILog _log; public