ASP.NET Core

《学习笔记》.NET Core API搭建

試著忘記壹切 提交于 2020-07-29 01:36:54
1.创建 ASP.NET Core Web程序,记住取消HTTPS配置 2.此时一个简单的.NET Core API 架子搭建好了,细心的人可以发现Properties下面不是CS文件,确是launchSettings.json这样的JSON文件而且整个项目结构跟.NET项目的结构不一样了,我们开始运行起来,发现浏览器的页面出现一个JSON数据,那代表我们一个简单的CoreAPI项目搭建成功了,此时我们也达到微软官网上面教材上说的的CoreAPI创建完成效果以及简单的API默认目录结构,此时你发现有默认的控制器和默认的实体类如我画的红线 3.创建WebAPI控制器,该控制器我们起名DemoController 4.创建完成后我们发现该控制器编辑器会默认帮你设定一个路由 5.此时我们需要将默认路由修改一下改成api/{controller}/{action}目的是为了配个我们请求的地址相吻合,其实这个地方是在公开你当前控制器中的所有方法如图 备注:api/{controller}/{action}中的controller指的是控制器名称,action指的当前控制器的方法 6.创建一个Get和POST的方法提供我们测试 7.运行当前程序,用ApiPost接口测试工具进行测试 POST数据提交方式麻烦一点,注意下图的横线 8.此时我们的一个.NET Core WebAPI程序搭建完成

认证授权方案之授权揭秘 (上篇)

。_饼干妹妹 提交于 2020-07-28 20:59:31
一、前言 回顾: 认证授权方案之授权初识 从上一节中,我们在对授权系统已经有了初步的认识和使用,可以发现,asp.net core为我们提供的授权策略是一个非常强大丰富且灵活的认证授权方案,能够满足大部分的授权场景。 在ConfigureServices中配置服务:将授权服务添加到容器 public void ConfigureServices(IServiceCollection services) { services.AddAuthorization(options => { options.AddPolicy("customizePermisson", policy => policy .Requirements .Add(new PermissionRequirement("user"))); }); //此外,还需要在 IAuthorizationHandler 类型的范围内向 DI 系统注册新的处理程序: services.AddScoped<IAuthorizationHandler, PermissionRequirementHandler>(); } 在Configure中注册管道:运行使用调用方法来配置Http请求管道 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

【asp.net core 系列】13 Identity 身份验证入门

孤街醉人 提交于 2020-07-28 20:46:03
0. 前言 通过前两篇我们实现了如何在Service层如何访问数据,以及如何运用简单的加密算法对数据加密。这一篇我们将探索如何实现asp.net core的身份验证。 1. 身份验证 asp.net core的身份验证有 JwtBearer和Cookie两种常见的模式,在这一篇我们将启用Cookie作为身份信息的保存。那么,我们如何启用呢? 在Startup.cs 的ConfigureServices(IServiceCollection services) 方法里添加如下: services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options => { Configuration.Bind("CookieSettings",options); }); 此时可以启动一个权限验证,当用户访问需要验证的页面或接口时,如果没有登录,则会自动跳转到: https://localhost:5001/Account/Login?ReturnUrl=XXXX 其中ReturnUrl指向来源页。 1.1 设置验证 当我们在Startup类里设置启用了身份验证后

ASP.NET Core中的依赖注入(3): 服务的注册与提供

孤者浪人 提交于 2020-07-28 20:35:00
原文: ASP.NET Core中的依赖注入(3): 服务的注册与提供 在采用了依赖注入的应用中,我们总是直接利用DI容器直接获取所需的服务实例,换句话说,DI容器起到了一个服务提供者的角色,它能够根据我们提供的服务描述信息提供一个可用的服务对象。ASP.NET Core中的DI容器体现为一个实现了IServiceProvider接口的对象。 ServiceProvider与ServiceDescriptor 服务的注册与提供 利用ServiceProvider来提供服务 提供一个服务实例的集合 获取ServiceProvider自身对象 对泛型的支持 一、ServiceProvider与ServiceDescriptor 我一直觉得优秀的设计首先应该是简单的设计,至少是看起来简单的设计,这就是我们所谓的大道至简。作为一个服务的提供者,ASP.NET Core中的DI容器最终体现为一个IServiceProvider接口,我们将所有实现了该接口的类型及其实例统称为ServiceProvider。如下面的代码片段所示,该接口简单至极,它仅仅提供了唯一个GetService方法,该方法根据提供的服务类型为你提供对应的服务实例。 1: public interface IServiceProvider 2: { 3: object GetService(Type serviceType)

ML.NET案例详解:在.NET下使用机器学习API实现化学分子式数据格式的判定

纵然是瞬间 提交于 2020-07-28 20:19:59
半年前写过一篇类似的文章,题目是:《 在.NET中使用机器学习API(ML.NET)实现化学分子式数据格式的判定 》,在该文中,我介绍了化学分子式数据格式的基本知识,同时给出了一个案例,展示了如何在.NET/.NET Core中,使用微软开源的ML.NET框架,通过机器学习,实现化学分子式数据格式的预测。 时隔半年,ML.NET有了很大的发展。在阅读我之前那篇文章的时候,或许还会对给出的案例代码有些疑问,ML.NET经过几个版本的更新之后,API的设计变得更为合理易用,所开放的接口也越来越多(比如,新版本的ML.NET中,对机器学习引擎的OutputSchema进行了完全开放,开发者可以根据自己的需要进行调用),因此,本文就再一次回到这个话题并进行更为详细的介绍,用新版本的ML.NET重新实现化学分子式数据格式的判定。 有关化学分子式的相关知识,在这里也就不多说了,直接看代码实现部分。 准备数据 我们的数据仍然是一个CSV文件,通过逗号分隔,文件包含两个字段:结构式数据(ChemicalStructure),以及该结构式数据的类型(Type),以下是这个文件的部分片段,注意,在这个文件中,我们没有定义CSV头,不过这不重要,只要记得在后面的代码实现中,将这个设置体现出来就可以了。 [O-]C(CCCCCCCCCCCCCCCCC)=O.[Na+],SMILES O=C(C1)N(C2

2017年终总结

ぐ巨炮叔叔 提交于 2020-07-28 20:08:38
眼看17年就要过去了,还是动动手指向自己汇报汇报今年的流水账吧! 2017年2月10日我辞掉了第一家公司的实习工作,在武汉陪着女朋友嗨了一周之后独自一人踏上了前往魔都上海的旅途。至此,魔都漂泊的日子正式开始了。 在经历了几天的挤地铁,投简历和一系列面试之后,于2017年2月22日正式拿到上海盖世汽车网络技术有限公司的offer。 接下来便是找房子、租房子、熟悉环境,五天之后正式入职。 4月份请假回校答辩,6月底再次回校,大学生涯结束了,正式毕业拿到毕业证,顺便还正式成为了一名中华人民共和国党员。 2017年7月正式签订劳动合同,转正,实习期结束。 一晃一年过去了,这一年我过的很充实,虽然很辛苦但是乐在其中。 作为一名程序员,最开心的莫过于技术的提升。这一年的工作中,接触了许多新技术,我也不断学习着进步着。 刚从学校走出来的我,主要做web开发,其它的都只是有所了解浅尝辄止,从来没有真正的去做过项目,借着公司的项目,现在会了微信小程序开发、Native App开发。 在公司主要用.NET开发网站,写写脚本,小工具,爬虫等等。慢慢接触了ReactNative、APICloud、WebApi、WebService、Asp.Net MVC、Asp.Net Core、Linux、Nginx、微信小程序,并且能够上手简单使用,同时做了几个网站,小程序和App 并且全部上线使用中。 新的一年

asp.netCore连接多个数据库

帅比萌擦擦* 提交于 2020-07-28 18:54:38
1.首先要有对应的context实体类, 多个实体类的构造函数的参数都应该是集合 public class firstContext : DbContext { //多个数据库应该使用这个构造函数,参数是上下文的集合 public GalpOnlineContext(DbContextOptions<firstContext> options) : base(options) { } //自定义DbContext实体属性名与数据库表对应名称(默认 表名与属性名对应是 User与Users) protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<User>().ToTable("user"); modelBuilder.Entity<Project>().ToTable("project"); //相关表名称的和类的对应 base.OnModelCreating(modelBuilder); } public DbSet<User> User { get; set; } //.... //第二种方法,重载父级的构造函数,和配置,这个只能是一个数据库时候的构造函数 /* public firstContext(DbContextOptions options) :

Asp .Net Core 依赖注入

≯℡__Kan透↙ 提交于 2020-07-28 17:57:01
为什么要使用依赖注入? 借助依赖注入,可以管理类之间的依赖,帮助我们在构建应用时遵循设计原则,确保代码可维护性和可扩展性 ASP.NET Core的整个架构中,依赖注入框架提供了对象创建和生命周期管理的核心能力,各个组件互相协作,也是依赖注入框架能力来实现的 两个核心包: Microsft.Extensions.Dependency;injection.Abstractions (抽象包) Microsoft.Extensions.Dependencylinjectiob (具体实现) *使用的是比较经典的接口分离模式,抽象包实现了接口的定义,实现包含具体的实现,组件只需要依赖他的抽象接口,而不需要依赖实现,在使用它的时候 注入他的实现即可(这样做的好处在于我们可以在使用时决定我们具体的那个实现,未来可以做任意的扩展来替换依赖注入的实现) 依赖注入的核心类型: IServiceCollection (负责服务的注册) ServiceDescriptor (服务注册时的信息) IServiceProvider (具体的容器,由IServiceCollection) IServiceScope (表示一个容器的子容器的生命周期) .Net Core里提供了那些生命周期呢? 单例 Singleton (指整个根容器的生命周期内都是单例,不管时子容器还是根容器,它和作用域的区别

C# 数据操作系列

和自甴很熟 提交于 2020-07-28 17:47:40
0. 前言 继上一篇,以及上上篇,我们对SqlSugar有了一个大概的认识,但是这并不完美,因为那些都是理论知识,无法描述我们工程开发中实际情况。而这一篇,将带领小伙伴们一起试着写一个能在工程中使用的模板类。 1. 创建一个Client SqlSugar在操作的时候需要一个Client,用来管理数据库连接,并操作数据库。所以我们写一个DbContext用来创建Client: public class DefaultContext { public SqlSugarClient Client { get; } public DefaultContext(string connectionString, DbType dbType) { Client = new SqlSugarClient(new ConnectionConfig { ConnectionString = connectionString,//"Data Source=./demo.db", DbType = dbType, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute }); Client.CodeFirst.InitTables(typeof(Dept), typeof(Person), typeof(Employee));

C# 数据操作系列

蹲街弑〆低调 提交于 2020-07-28 14:08:26
0. 前言 前一篇我们详细的介绍了SqlSugar的增删改查,那些已经满足我们在日常工程开发中的使用了。但是还有一点点在开发中并不常用,但是却非常有用的方法。接下来让我们一起来看看还有哪些有意思的内容。 1. 不同寻常的查询 之前介绍了针对单个表的查询,同样也是相对简单的查询模式。虽然开发完全够用,但是难免会遇到一些特殊的情况。而下面这些方法就是为了解决这些意料之外。 1.1 多表查询 SqlSugar提供了一种特殊的多表查询方案,使用IQueryable接口 。来看看是怎样操作的吧: ISugarQueryable<T, T2> Queryable<T, T2>(Expression<Func<T, T2, object[]>> joinExpression); ISugarQueryable<T, T2> Queryable<T, T2>(ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, Expression<Func<T, T2, bool>> joinExpression) where T : class, new() where T2 : class, new(); ISugarQueryable<T, T2> Queryable<T, T2>(ISugarQueryable<T>