ASP.NET Core

.NET Core技术研究-HttpContext访问的正确姿势

拟墨画扇 提交于 2020-04-13 07:54:08
原文: .NET Core技术研究-HttpContext访问的正确姿势 将ASP.NET升级到ASP.NET Core之后,相信大家都会遇到HttpContext.Current无法使用的问题。这也是我们迁移ASP.NET Core必须解决的问题。 本文我们详细讨论一下,使用HttpContext的正确姿势。 先列一下使用HttpContext的具体场景: 1. 在Controller层访问HttpContext 2. 在中间件中使用HttpContext 3. 在数据访问层使用HttpContext 4. 在后台线程中访问HttpContext 5. 在Razor页面模型中访问HttpContext 6. 在Razor视图中访问HttpContext 可能还有其他的应用场景。接下来我们按场景一一示例解决。 首先本文用的是ASP.NET Core 3.1 一、新建一个ASP.NET Core Web应用程序 二、在Controller层访问HttpContext 示例代码中HomeController继承与Controller抽象类 Controller父类中继承与ControllerBase抽象类 其中ControllerBase抽象类有提供了对HttpContext的访问 所以,我们在Controller这一层可以按以下方式访问HttpContext: 1 public

.NET Core技术研究-中间件的由来和使用

倖福魔咒の 提交于 2020-04-13 07:50:03
原文: .NET Core技术研究-中间件的由来和使用 我们将原有ASP.NET应用升级到ASP.NET Core的过程中,会遇到一个新的概念: 中间件。 中间件是ASP.NET Core全新引入的概念。 中间件是一种装配到应用管道中以处理请求和响应的软件。 每个组件: 选择是否将请求传递到管道中的下一个组件。 可在管道中的下一个组件前后执行工作。 单独看以上中间件的定义,一个很直观的感觉:中间件是HTTP请求管道中的一层层的AOP扩展。 在展开介绍中间件之前,我们先回顾一下ASP.NET中HttpHandler和HttpModule的处理方式。 一、ASP.NET中HttpHandler和HttpModule 先看一张图: 上图中有两个概念HttpHandler和HttpModule,其中: HttpHandler 用于处理具有给定文件名或扩展名的请求。比如上图中的.report类的请求,同时,任何一个HttpHandler都需要实现接口IHttpHandler,都需要在Web.Config配置文件中注册使用。 HttpModule 用于处理每个请求调用,比如上图中的Authorization Module,每个Http请求都会经过HttpModule的处理。通过HttpModule可以中断Http请求,可以自定义HttpResponse返回。同时

asp.net core程序发布(Webapi,web网站)

孤者浪人 提交于 2020-04-12 13:49:21
asp.net core程序发布(Webapi,web网站) iis 下发布asp.net core 应用 1.下载AspNetCoreModuleV2 安装 ASP.NET Core 2.2 Runtime (v2.2.2) - Windows Hosting Bundle Installe 2.在vs2019项目里发布应用; 3.在iis上新建无托管代码应用程序池 4.添加网站,物理路径指向刚发布的应用。 2.asp.net 命令行发布: 1.在项目bin/debug or release netcoreapp3.1文件夹下执行 cmd 2.在cmd窗口执行:dotnet aaa.dll --urls="http://*:5177" --ip="127.0.0.1" --port=5177 --YQF.Pay.dll 为controller项目名称 3.在startup.cs configure 方法里添加: //让通过命令行发布的程序,css,js,img可以显示 app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot")) }); https:/

ASP.NET Core 中的过滤器(Action过滤器,控制器过滤器,全局应用程序过滤器)

风流意气都作罢 提交于 2020-04-12 10:57:37
十年河东,十年河西,莫欺少年穷 学无止境,精益求精 今儿是周六,苏州的天空飘着毛毛细雨,气温也下降了不少,上午去了苏州繁花中心,来到二楼,自学了会古筝,逛了逛商场,中午去了肯德基,给孩子买了鸡翅,我和我老婆大人各喝了一杯咖啡。下午回到家,躺在床上刷抖音,刷的时间长了,也就觉得特别无聊,索性看看博客园吧,嘿嘿,于是我买了一瓶100ML的56度牛栏山二锅头,边吃花生米边看,本打算看netcore的中间件,于是百度搜了一些内容,大多数写的中间件都是参考微软教程,看的也是索然无味,有的说中间件类似于AOP,有的说中间件是HTTP请求管道中的一个组件,用于拦截你的http请求并决定是否把你的请求传递给下一个中间件,总的来说,中间件就是一个横向切面编程,也就是所谓的AOP,这里咱们不讨论中间件,我们今天讨论的是和中间件功能类似的过滤器,何为过滤器呢?过滤器和中间件有何细微的差别呢?哈哈,其实本篇博客是转载的别人,原文地址:https://www.cnblogs.com/jlion/p/12394949.html 首先感谢原文作者的贡献,其次我之所以转载这篇博客,一是因为作者写的好,二是因为这些知识和之前的MVC过滤器很类似,再者,我之前也写过过滤器的应用,比如MVC的登录授权过滤器,对MVC的登录授权过滤器有兴趣的小虎斑可参考我的博客: https://www.cnblogs.com

一不小心写了个免费的跨平台网络考试培训网教系统

时光总嘲笑我的痴心妄想 提交于 2020-04-12 08:30:03
之前的旧版本为许多客户服务了好多年,但随着技术变更与发展,旧版已难以再挑起大梁。因本人一直都扎根在网教行业,对实现网络考试与培训有着深刻的认识与理解,故打算用当前主流技术全新构建一套新的版本。 新版本采用.Net Core 2(目前已升级为.Net Core 3)c#语言编写(新版名为“麦荻网教系统”),结合分布式架构、微服务等技术开发而成。麦荻网教系统有着极高的并发承载能力,有着极强的稳定性能,且在应对超大规模的应用场景时也能有更好的应对能力与扩展性。麦荻网教系统前端基于Html5(开源免费)、Vue(开源免费)、iView(开源免费)等技术实现前后端分离架构开发而成。 1、麦荻网教系统支持部署在Windows Server 2012/2016/2019及更高版本的系统、支持部署在Ubuntu 14.10/16.10及更高版本的系统、支持部署在CentOS 7.0及更高版本的系统、支持部署在Docker 1.10及更高版本的系统。 2、麦荻网教系统支持SQL Server 2012/2014/2016及更高版本的数据库、支持MySQL 6.0及更高版本的数据库。 3、麦荻网教系统支持Memcached 1.4及更高版本的缓存组件(开源免费)、支持RabbitMQ 3.8(开源免费)及更高版本的队列组件。 4、您可以按自已的实际应用规模将“麦荻网教系统

ASP.NET CORE WEBAPI文件下载

折月煮酒 提交于 2020-04-12 07:32:37
最近要使用ASP.NET CORE WEBAPI用来下载文件,使用的.NET CORE 3.1。考虑如下场景: 文件是程序生成的。 文件应该能兼容各种格式。 浏览器可以感知进行下载。 准备 经过简单的调研,得到以下结论。 ASP.NET CORE 提供FileResult这种类型的ActionResult,可以直接返回文件结果,不需要直接处理HttpResponse。 通过Stream可以直接返回文件流供浏览器下载。 FileStreamResult是FileResult的具体实现,返回值应该是此类对象。 Stream有多种类型,适合直接内存中生成文件对象的是MemoryStream。 对目标有了基础的了解,就可以开始动手实现了。 实现 建立好ASP.NET CORE WEBAPI工程,把生成文件的代码独立出来一个函数。我这里需要是下载一个CSV格式的文件,因此生成一个CSV文件。 对于磁盘上的文件,可以使用FileStream对象,由于我这里需要运行中生成这个文件,需要使用MemoryStream。 using var stream = new MemoryStream(); using var writer = new StreamWriter(stream); //生成标题 var propCollection = ttype.GetProperties(); foreach

[ASP.NET Core MVC] 如何实现运行时动态定义Controller类型?

最后都变了- 提交于 2020-04-11 19:49:58
昨天有个朋友在微信上问我一个问题:他希望通过动态脚本的形式实现对ASP.NET Core MVC应用的扩展,比如在程序运行过程中上传一段C#脚本将其中定义的Controller类型注册到应用中,问我是否有好解决方案。我当时在外边,回复不太方便,所以只给他说了两个接口/类型:IActionDescriptorProvider和ApplicationPartManager。这是一个挺有意思的问题,所以回家后通过两种方案实现了这个需求。源代码从 这里 下载。 一、实现的效果 我们先来看看实现的效果。如下所示的是一个MVC应用的主页,我们可以在文本框中通过编写C#代码定义一个有效的Controller类型,然后点击“Register”按钮,定义的Controller类型将自动注册到MVC应用中 由于我们采用了针对模板为“{controller}/{action}”的约定路由,所以我们采用路径“/foo/bar”就可以访问上图中定义在FooController中的Action方法Bar,下图证实了这一点。 二、动态编译源代码 要实现如上所示的“针对Controller类型的动态注册”,首先需要解决的是针对提供源代码的动态编译问题,我们知道这个可以利用Roslyn来解决。具体来说,我们定义了如下这个ICompiler接口,它的Compile方法将会对参数sourceCode提供的源代码进行编译

一不小心写了个免费的跨平台网络考试培训网教系统

夙愿已清 提交于 2020-04-11 18:59:16
之前的旧版本为许多客户服务了好多年,但随着技术变更与发展,旧版已难以再挑起大梁。因本人一直都扎根在网教行业,对实现网络考试与培训有着深刻的认识与理解,故打算用当前主流技术全新构建一套新的版本。 新版本采用.Net Core 2(目前已升级为.Net Core 3)c#语言编写(新版名为“麦荻网教系统”),结合分布式架构、微服务等技术开发而成。麦荻网教系统有着极高的并发承载能力,有着极强的稳定性能,且在应对超大规模的应用场景时也能有更好的应对能力与扩展性。麦荻网教系统前端基于Html5(开源免费)、Vue(开源免费)、iView(开源免费)等技术实现前后端分离架构开发而成。 1、麦荻网教系统支持部署在Windows Server 2012/2016/2019及更高版本的系统、支持部署在Ubuntu 14.10/16.10及更高版本的系统、支持部署在CentOS 7.0及更高版本的系统、支持部署在Docker 1.10及更高版本的系统。 2、麦荻网教系统支持SQL Server 2012/2014/2016及更高版本的数据库、支持MySQL 6.0及更高版本的数据库。 3、麦荻网教系统支持Memcached 1.4及更高版本的缓存组件(开源免费)、支持RabbitMQ 3.8(开源免费)及更高版本的队列组件。 4、您可以按自已的实际应用规模将“麦荻网教系统

ASP.NET Core利用拦截器 IActionFilter实现权限控制

試著忘記壹切 提交于 2020-04-11 08:52:59
原文: ASP.NET Core利用拦截器 IActionFilter实现权限控制 “ 麦荻网教系统 ”采用了前后端代码分离的架构,即“Miidy.Cloud.Console”站与“Miidy.Cloud.Manage”站(两个前端站)同时通过web api的方式调用“Miidy.Cloud.RestWeb” web服务,以达到前后端代码分离的方式(详情请查看麦荻网教系统的 安装部署文档 )。因为“Miidy.Cloud.Manage”站只开放给具备管理权限的用户,故除了在前端增加控制外,还需在“Miidy.Cloud.RestWeb” web服务内进行权限控制。那么,如何在“Miidy.Cloud.RestWeb” web服务内根据用户实现权限控制呢? IActionFilter 在“Miidy.Cloud.RestWeb”程序内,我们将借助IActionFilter接口来实现请求的拦截。该接口提供了两个方法( 官网文档 )分别为:OnActionExecuted(Action执行后)、OnActionExecuting(Action执行前)。根据需求,我们实现OnActionExecuting即可。 Attribute 我们再借助“Attribute”属性特性,可帮助我们在“Miidy.Cloud.RestWeb”指定的方法内按需使用拦截器,这样便可很方便的达到权限控制的目的。

ASP.NET Core结合Nacos来完成配置管理和服务发现

流过昼夜 提交于 2020-04-10 13:35:05
目录 前言 Nacos的简介 启动Nacos 配置管理 服务发现 写在最后 前言 今年4月份的时候,和平台组的同事一起调研了一下Nacos,也就在那个时候写了.net core版本的非官方版的 SDK 。 虽然公司内部由于某些原因最后没有真正的用起来,但很多人还是挺看好的。在和镇汐大大沟通后,决定写一篇博客简单介绍一下。 下面这个图,就是本文的重点了。 Nacos的简介 Nacos是一个易于构建云原生应用的动态服务发现、配置管理和服务管理平台,它提供了一组简单易用的特性集,帮助我们快速实现动态服务发现、服务配置、服务元数据及流量管理。 它有下面的关键特性 服务发现和服务健康监测 动态配置服务 动态 DNS 服务 服务及其元数据管理 ... 特性还是挺多的,也有挺多值的挖掘的地方。有关Nacos的更多信息可以访问下面的地址: https://nacos.io/zh-cn/ https://github.com/nacos-group https://github.com/alibaba/nacos 下面就开始正题了,第一步肯定是先把Nacos跑起来。 启动Nacos 由于是演示,所以直接用docker启动了 Standalone Mysql 模式的。 git clone --depth 1 https://github.com/nacos-group/nacos-docker.git