ASP.NET Core

记录:如何使用ASP.NET Core和EnityFramework Core实现 数据库操作 和 数据库实体 的项目分离

大城市里の小女人 提交于 2020-04-20 17:49:26
前情提要:   现有一个网站框架,包括主体项目WebApp一个,包含 IIdentityUser 接口的基架项目 A。用于处理用户身份验证的服务 AuthenticationService 位于命名空间B。用于保存数据的实体 User : IIdentityUser 位置项目C。项目之间的关系是B和C依赖项目A。 需求:   现在有一个新项目D,在这个项目里有一个DUser : IIdentityUser 。如何处理才能最优雅的在不添加引用和修改项目B的前提下,将用户保存至DUser。 实际例子:   在ASP.NET CORE中,有一个东西叫IdentityServer。里面就有这个东西,他写的是类似IdentityServerBuilder.AddService<TUser, TRole>()这种代码,如何实现? 解决方案:   1、新建一个泛类(这个类可以标记为internal,外部不需要了解,也不需要访问): public class UserContext<TUser> where TUser : class, IIdentityUser, new () { public YourContext dbContext; public UserContext(YourContext ctx) => dbContext = ctx; public DbSet<TUser>

《ASP.NET Core应用开发入门教程》与《ASP.NET Core 应用开发项目实战》正式出版

百般思念 提交于 2020-04-20 13:45:11
“全书之写印,实系初稿。有时公私琐务猬集,每写一句,三搁其笔;有时兴会淋漓,走笔疾书,絮絮不休;有时意趣萧索,执笔木坐,草草而止。每写一段,自助覆阅,辄摇其首,觉有大不妥者,即贴补重书,故剪刀浆糊乃不离左右。个中甘苦,只自知之。”董作宾先生的这段文字正好描述我写作此书的状态。 《ASP.NET Core应用开发入门教程》与《ASP.NET Core 应用开发项目实战》于2020年1月正式出版。 《ASP.NET Core应用开发入门教程》是作者潜心研究ASP.NET Core 技术的心血之作,书如其名,整本书的内容深入浅出地介绍了ASP.NET Core应用开发所需要的基础知识,并对其底层框架进行了剖析,力求将ASP.NET Core的整个运行机制完整而清晰地呈现在读者面前。主要包括.NET Core的基础知识及其安装、dotnet命令、Visual Studio开发工具的安装和使用、ASP.NET Core的原理及其组件介绍、Entity Framework Core框架、ASP.NET Core MVC框架和依赖注入等。 《ASP.NET Core 应用开发项目实战》主要是在《ASP.NET Core应用开发入门教程》的基础上,通过开发一个经过简化的物流管理信息系统(TPLMS),来实践ASP.NET Core MVC应用程序框架的开发技术

NET 轻松构建中间件模式

泪湿孤枕 提交于 2020-04-20 09:07:07
让 .NET 轻松构建中间件模式代码 Intro # 在 asp.net core 中中间件的设计令人叹为观止,如此高大上的设计何不集成到自己的代码里呢。 于是就有了封装了一个简单通用的中间件模板的想法,以后有需要的时候就可以拿来即用。 接口定义 # 这里按执行的委托是同步还是异步分为了同步和异步两种构建方法 Copy //没有返回值的同步中间件构建器 public interface IPipelineBuilder< TContext> { IPipelineBuilder<TContext> Use( Func<Action<TContext>, Action<TContext>> middleware); Action<TContext> Build( ); } // 异步中间件构建器 public interface IAsyncPipelineBuilder< TContext> { IAsyncPipelineBuilder<TContext> Use( Func<Func<TContext, Task>, Func<TContext, Task>> middleware); Func<TContext, Task> Build( ); } 为了方便使用,定义一下扩展方法,使得可以像 asp.net core 中 app.Use(Fun<HttpContext,

.Net Core 跨平台:一个简单程序的多平台(windows、Linux、osx)发布

☆樱花仙子☆ 提交于 2020-04-20 08:24:48
.Net Core 跨平台:一个简单程序的多平台(windows、Linux、osx)发布 .Net Core 3.0 已于2019年9月23日发布了,包含了一些新特性,具体参见 Announcing .NET Core 3.0 .NET Core是一个跨平台,高性能,开放源代码框架,用于构建现代的,基于云的,Internet连接的应用程序框架,其具有一下优点和特点: 跨平台:. NET Framework应用程序仅在Windows平台上运行,而.NET Core应用程序可以在Windows平台上开发并跨Windows,macOS或Linux等不同平台运行。 ASP.NET 4.x应用程序只能托管在IIS上,而ASP.NET Core应用程序可以托管在IIS,Apache,Docker或您自己的进程中的自托管中。 从开发的角度来看,可以使用Visual Studio或Visual Studio Code来构建.NET Core应用程序。开发者可以使用第三方编辑器,例如Sublime。 为MVC和Web API统一编程模型 :通过ASP.NET Core,我们使用相同的统一编程模型来创建MVC样式的Web应用程序和ASP.NET Web API。 在这两种情况下,我们创建的Controller都从相同的Controller基类继承,并返回IActionResult。 顾名思义

.Net vs .Net Core,我该如何选择?看这一篇文章就够了

不羁的心 提交于 2020-04-20 08:24:06
前言 .Net目前支持构建服务器端应用程序的两种实现主要有两种,.NET Framework和.NET Core。两者共享许多相同的组件,并且您可以在两者之间共享代码。但是,两者之间存在根本差异,在我们选择使用哪种框架构建应用时,您的选择取决于您要完成的工作,以下说明两种框架的应用场景,希望能够帮助您做出最正确的选择。 在以下情况下,将.NET Core用于服务器应用程序: 您有跨平台的需求。 您正在针对微服务。 您正在使用Docker容器。 您需要高性能和可扩展的系统。 每个应用程序需要并行的.NET版本。 在以下情况下,将.NET Framework用于服务器应用程序: 您的应用当前使用.NET Framework(建议扩展而不是迁移)。 您的应用程序使用了.NET Core不可用的第三方.NET库或NuGet软件包。 您的应用使用了.NET Core无法使用的.NET技术。 您的应用使用的平台不支持.NET Core。 Windows,macOS和Linux支持.NET Core。 何时选择.NET Core 以下各节对前面所述选择.NET Core的原因进行了更详细的说明。 跨平台需求 如果您的应用程序(Web /服务)需要在多个平台(Windows,Linux和macOS)上运行,请使用.NET Core。 .NET Core支持将前面提到的操作系统作为您的开发工作站。

.Net Core初识以及启动配置

若如初见. 提交于 2020-04-20 07:20:15
更新计划 这段时间,会陆续把去年一年在公司做的相关培训,整理成博客分享给大家,在团队内部已经把大部分的.net项目容器化并部署到k8s,中间也踩了很多坑,也会把相关问题整理处理,大家一起学习交流,哈。 .Net Core初识以及启动配置 .Net Core依赖注入、服务注册 .Net Core中间件、应用配置 .Net Core日志路由 .Net Core实际开发中常用组件 .Net Core应用部署 .net程序员为什么要学习.net core .Net Core 是.Net的未来,微软在19年 5月已经明确说明,未来只有.Net 5(=.NET Core vNext),.Net 5是.net core的下一个版本,你可以用它来开发 Windows , Linux , MacOs , IOS , Android 等等应用。 图片来源 在容器、k8s、Devops、微服务等技术的推动下,2020年云原生将势不可挡,.net Cor而设计之初就了适配云原生,它有很多优点,都说明它是云原生时代,是一个很好的选择。 它体积更小,启动速度更快、占用资源更少、支持水平扩展 考虑自己的职业发展,.net core也是必须需要熟悉的 什么是.Net Core 开源通用的开发框架 github地址 ,微软和社区共同维护 .net core 模块化管理,按需引用对应组件 支持跨平台、跨架构开发

ASP.NET Core开发-如何配置Kestrel 网址Urls

。_饼干妹妹 提交于 2020-04-20 07:18:17
ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置。 今天给介绍全面的ASP.NET Core 配置 Urls,使用多种方式配置Urls。 让你了解ASP.NET Core Kestrel 的地址设置。 下面我们就来了解如何配置。我将介绍4种方式来配置Urls。 首先我们新建一个ASP.NET Core 空应用程序。 UseUrls 大家最熟悉的一种也就是使用UseUrls 。下面我们就来实际使用。 UseUrls 方法可以使用多个地址,也可以使用一个地址。 单个网址 UseUrls("http://localhost:5001") 多个网址 UseUrls("http://localhost:5001", "http://localhost:5002", "http://*:5003")//多个地址 *代表绑定所有本机地址 可以局域网访问,拥有外网ip 就可以外网访问 所有的代码都在 Program.cs Main 方法里 public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory())

一个新实验:使用gRPC-Web从浏览器调用.NET gRPC服务

陌路散爱 提交于 2020-04-20 04:58:53
今天给大家翻译一篇由ASP.NET首席开发工程师 James Newton-King 前几天发表的一篇博客,文中带来了一个实验性的产品gRPC-Web。大家可以点击文末的讨论帖进行相关反馈。我会在文章末尾给出原文链接。全部译文如下: 我很高兴宣布通过.NET对gRPC-Web进行实验性支持。gRPC-Web允许从基于浏览器的应用程序(例如JavaScript SPA或Blazor WebAssembly应用程序)调用gRPC。 .NET的gRPC-Web承诺将gRPC的许多出色功能引入浏览器应用程序: 强类型代码生成的客户端 紧凑的Protobuf消息 服务流 什么是gRPC-Web 无法在浏览器中实现gRPC HTTP / 2规范,因为没有浏览器API能够对HTTP请求进行足够的细粒度控制。 gRPC-Web 通过与HTTP / 1.1和HTTP / 2进行兼容来解决此问题。 gRPC-Web不是一项新技术。已经有一个稳定的 gRPC-Web JavaScript客户端 ,以及一个 用于在gRPC和gRPC-Web之间进行转换的代理 。新的实验性程序包允许ASP.NET Core gRPC应用程序支持 不 带代理的gRPC-Web ,并允许.NET Core gRPC客户端调用gRPC-Web服务。(非常适合Blazor WebAssembly应用!) 使用gRPC

asp.net core 3.x 身份验证-3cookie身份验证原理

倖福魔咒の 提交于 2020-04-20 04:53:43
概述 上两篇( asp.net core 3.x 身份验证-1涉及到的概念 、 asp.net core 3.x 身份验证-2启动阶段的配置 )介绍了身份验证相关概念以及启动阶段的配置,本篇以cookie身份验证为例来大致说明asp.net core中的身份验证原理。 如果我们的应用只考虑浏览器使用,且不考虑前后端分离,cookie是最简单的身份验证方式。虽然这样命名,但我们的用户标识并非一定要存到cookie里,asp.net core允许我们存储到任何地方,如:session、自定义基于内存的存储、redis等等。身份验证与asp.net core Identity结合会更简单,它提供了用户管理功能,以及更身份验证相关的辅助类,如:SignManager,不过暂时不将这东东。 还是以宏观上的理解和使用为主 。主要涉及如下流程: 未登录时请求受保护的资源 登录 已登录时访问受保护的资源 注销 其中步骤1、3差别很小。总体流程大致如下图: 先在Startup中做如下配置: 1 public void ConfigureServices(IServiceCollection services) 2 { 3 services.AddAuthentication().AddCookie(); 4 services.AddControllersWithViews(); 5 } 6 7 //

asp.net core中,使用CancellationToken在用户终止请求时取消所有异步操作+ abp中的设计

爱⌒轻易说出口 提交于 2020-04-20 04:35:44
如果一个Controller.Action里的处理非常耗时,比如读数据库、文件操作、调用第三方接口等 此时用户随时可能关闭浏览器、F5刷新网页等操作。 但是服务端的耗时代码任然在执行,这太浪费了,既然用户终止请求了,我们就应该取消所有的耗时操作 在.net开发中,几乎所有的异步方法都有个CancellationToken类型的参数,只要我们传入此令牌,将来我们随时可以通过此令牌取消异步操作 而asp.net中HttpContext提供了一个RequestAborted属性,它就是CancellationToken类型,当用户以任何方式终止请求时, HttpContext.RequestAborted就会触发取消 所以如果我们在异步方法中都传入这个参数,就能实现当用户终止请求时,我们所有的异步操作都会立即取消 并发大的情况下,这个操作很重要。 参考代码: 1 public async Task<ActionResult> TestAsync() 2 { 3 await System.IO.File.ReadAllTextAsync( @" d:\a.txt " , HttpContext.RequestAborted); 4 // ....略 上面是asp.net默认行为,你会发现一个问题,真个应用程序有铺天盖地的异步方法,如果都想实现上述特征