前言:

这些天,似乎.NET Core相关的新闻和文章经常在我眼前晃~~~

昨天,微软又发布了.Core 2.1,又愰了一下,差点没亮瞎我的眼睛。

好吧,大概是上天给我的暗示,毕竟 CYQ.Data 早就支持上.Core了。

而 Taurus.MVC ,估计也闹委屈了,好吧,大慈大悲的怜见你一回,给你上ASP.NET Core支持吧。

又要一不小心就研究.NET Core了,这东西,只有家里的电脑有VS2017的环境,因此只能在家研究。

中间停停走走,思考了N天,最后用上三十几年的手速,敲足一天一夜代码,终于见到目署光了。

下面先和大伙分享下经验~~~。

Taurus.MVC 如何支持.NET Core?

对于Taurus.MVC,其核心就两个dll项目:

CYQ.Data 已经支持上.NET Core。

就只要处理好 Taurus.Core 项目也支持.NET Core就好了吧。

想想就感觉好简单的样子。

里面的代码,不多,应该不会像当年CYQ.Data支持 .NET Core 那么费心思。

这个从哪弄起好呢~~~~

思考的过程,Taurus.Core项目针对.NET Core重写?

Taurus.Core,和CYQ.Data不同,毕竟Taurus.MVC=CYQ.Data+Taurus.Core:

CYQ.Data 是数据库操作组像,虽然EF强大太多,但毕竟不涉及到程序启动流程。Taurus.Core,则是从IHttpModule,IHttpHandle为入口开启的自定义MVC世界

建个Demo看看ASP.NET Core的项目:

其启动则是从Program,这不就是一个Exe程序么?

再到Startup:

 public class Startup{// This method gets called by the runtime. Use this method to add services to the container.// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940public void ConfigureServices(IServiceCollection services){}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){}

又包含Service服务和一堆Use方式的中件间配置。

网上的文章服务服务的叫,是什么鬼,是操作系统的进程服务吗?

想多了~~~一毛钱关系也没有,人家就是喜欢叫这个名而已。

所以研究的第一个课题就是:传统ASP.NET的启动模式和ASP.NET Core启动模式的差异。

换句话说就是:IHttpModule、IHttpHandler和Startup的不同。

光是这个话题,零散就看了不少文章,中间也隔了不少时间。

经过半桶水的了解后,发现世界有多大,差异就有这么大, 难道只能重写了?

一直关注我博客的好人都知道,我维护的精品框架太多了,见:https://github.com/cyq1162

所以,如果同一个框架,要同时维护两份不同版本的源码(.NET Core版本和非.NET Core版本),我会蛋伤的。

于是,看.NET Core 写兼容代码的时候,内心就会吐槽微软蛋疼,说好的兼容性呢?心中荡漾起那消失已失的草泥马!

后来,心中一个声音,闹腾,太闹腾,放下吧,放下吧~~~~

CYQ.Data 支持.NET Core 方式的余光再次神降

还记得当年:

思考CYQ.Data支持.NET Core的时候,

转展了失眠了无数个白天,

黑夜中左手右手一个慢动作,

经过不断的思考与试验,

最后感动苍天,

神光突降,

最出了最后的解决方案,

非常闪光。

那就是:

把所有不兼容的代码,自己慢慢补全吧,这是一件很费脑的体力活:

所以,当所有的兼容性代码鲁完以后,原有的CYQ.Data 代码一行无变。

只要将这补全的兼容性文件夹包含进项目,马上就神奇般的支持上.NET Core。

 

同理可证:下面看看都有这次又要补全多少所需的兼容性代码!

Taurus.MVC 支持.NET Core的兼容性代码

补全完善:System.Web.HttpContext系列兼容性代码

看起来不少,基本核心的都要补,又是一次费脑的体力活,哥的夜生活,就被你们败光了时间~~~~

在这过程,有过以下不少带坑的问题:

1:在Taurus.MVC Core中,关于是传递Core版本的HttpContext,还是传递Web版HttpContext?

答:用Web版本(让传统得到延续,节省学习成本)

2:对于HttpContext,HttpResponse,HttpRequest ,是用继承,还是不用继承?

答:不用继承,因为无法继承,有些属性名的返回值冲突了。

3:ASP.NET Core目录结构路径和传统的方式的差异性。

答:.NET Core区分执行目录(dll和exe目录)和资源目录(wwwroot),而传统就是一个根目录和bin目录。

4:其它如:文件上传、路径重写、Cookie,编解码等处理。

答:基本是转移了使用的方法位置。

经过很用力的撸,终于解决了上述遇到的问题。

这些重写的源码,已经提交提交了。

可以见:https://github.com/cyq1162/cyqdata/tree/master/DotNetCore

不过以上的重写,都是打包在CYQ.Data Core,

毕竟之前就有一些了,顺路也补多几个,

方便后续对 ASP.NET Aries 的.NET Core版本的支持。

Taurus.Core项目,仅追加了一个中间件文件

看图撸代码:

原有代码一行未动,新增了一个中间件:TaurusMiddleware.cs

中间件的源码,由于未提交,这里先放出来:

using CYQ.Data;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Taurus.Core;namespace Microsoft.AspNetCore.Http
{/// <summary>/// 为支持Asp.net core 存在的文件/// </summary>public class TaurusMiddleware{private readonly RequestDelegate next;public TaurusMiddleware(RequestDelegate next){this.next = next;}public async Task Invoke(HttpContext context){try{System.Web.HttpApplication.Instance.ExecuteEventHandler();//处理信息await next(context);}catch (Exception ex){Log.WriteLogToTxt(ex);}}}public static class TaurusExtensions{public static IApplicationBuilder UseTaurusMvc(this IApplicationBuilder builder, IHostingEnvironment env){//执行一次,用于注册事件UrlRewrite url = new UrlRewrite();url.Init(System.Web.HttpApplication.Instance);AppConfig.WebRootPath = env.WebRootPath;//设置根目录地址,ASPNETCore的根目录和其它应用不一样。return builder.UseMiddleware<TaurusMiddleware>();}}
}

具体代码是神码意思,就不解释了,了解.NET Core入门的都会懂的。

Taurus.MVC的中间件的使用(提前预告):

在引入CYQ.Data和Taurus.Core(dll或源码项目)后,中间件的引入代码:

添加这三行代码,引入上下文和TaurusMVC后,运行看看效果(截图太美,两张就好):

1:

2:

一切都运行的很完美,当然,这些都是体内精虫的功劳。

总结:

在ASP.NET Core的开发,这条道上:不管是MVC,还是Web API,

微软都是:ASP.NET Core+EF

今天,大伙多了一种选择:Taurus.MVC+CYQ.Data。

后者,在继承跨平台的前提下,保留了传统高性能的模式,节省了学习成本。

正式发布,待整理整理,应该在下周。

PS:好久没写IT连创业系列的文章,不知道大伙还有人知道我在创业不?

转载于:https://www.cnblogs.com/cyq1162/p/9019412.html

Taurus.MVC 支持Asp.Net Core 的过程相关推荐

  1. 《从零开始学ASP.NET CORE MVC》:ASP.NET Core 中的 Main方法(5)

    本文出自<从零开始学ASP.NET CORE MVC> 推荐文章:ASP.NET Core Web 项目文件 ASP.NET Core 中的 Main方法 一个开始专心写字的人 在ASP. ...

  2. vici 开源asp.net mvc支持asp.net2.0II6.0下部署 实例下载地址

    vici 官方asp.net mvc 实例下载地址 http://viciproject.com/wiki/Projects/Mvc/Download 个人正在学习中 下载后可以运行 如下载后,要立马 ...

  3. 国内首个支持ASP.NET Core和Node.js的虚拟主机

    https://core-hosting.net/ 另外还支持PHP 跳楼白菜价低至:¥0.17/天.¥5/月.¥50/年,免备案,支持https,免费赠送一个三级域名,不需要额外购买域名也可以访问.

  4. 将 ASP.NET Core 2.1 升级到最新的长期支持版本ASP.NET Core 3.1

    目录 前言 Microsoft.AspNetCore.Mvc.ViewFeatures.Internal 消失了 升级到 ASP.NET Core 3.1 项目文件(.csproj) Program. ...

  5. 这本694页的程序员砖头书让你精通ASP.NET Core MVC

    ASP.NET Core MVC是一个来自微软的Web应用程序开发框架,它结合了模型-视图-控制器(MVC)体系结构的有效性和整洁性.敏捷开发的想法和技术,以及.NET平台的最佳部分. 1.1 ASP ...

  6. 4.1ASP.NET Core请求过程「深入浅出ASP.NET Core系列」

    原文:4.1ASP.NET Core请求过程「深入浅出ASP.NET Core系列」 希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. HTTP请求过程 这里展示整 ...

  7. aspnetcore mvc 异常处理_深入探究ASP.NET Core异常处理中间件

    前言 全局异常处理是我们编程过程中不可或缺的重要环节.有了全局异常处理机制给我们带来了很多便捷,首先我们不用满屏幕处理程序可能出现的异常,其次我们可以对异常进行统一的处理,比如收集异常信息或者返回统一 ...

  8. ASP.NET Core MVC中的 [Required]与[BindRequired]

    在开发ASP.NET Core MVC应用程序时,需要对控制器中的模型校验数据有效性,元数据注释(Data Annotations)是一个完美的解决方案. 元数据注释最典型例子是确保API的调用者提供 ...

  9. ASP.NET Core MVC TagHelper实践HighchartsNET快速图表控件

    ASP.NET Core MVC TagHelper最佳实践HighchartsNET快速图表控件支持ASP.NET Core. 曾经在WebForms上写过 HighchartsNET快速图表控件- ...

最新文章

  1. 【技术综述】人脸妆造迁移核心技术总结
  2. boost::hana::less_equal用法的测试程序
  3. 新疆大学(新大)OJ xju 1006: 比赛排名 第二类斯特林数+阶乘
  4. vue 中$index $key 已移除
  5. php path separator,php 非常有用的高级函数PATH_SEPARATOR常量和set_include_path
  6. Django框架——中间件
  7. 黄渤《一出好戏》首日票房 1.5 亿,口碑碾压《爱情公寓》凭的是什么?
  8. Bailian3470 整理扑克牌【贪心+二分】
  9. django mysql处理_利用Django去操作数据库并完成简易的登录及编辑功能
  10. Unity3D中Update和FixedUpdate、LateUpdate的区别
  11. 软件工程小组第九次会议记录
  12. 防护等级 ipx9、ipx9k、ip69、ip69k之间的区别
  13. Chrome扩展开发总结之浏览器书签获取
  14. IP地址与MAC地址的区别与特点
  15. 网站不收录怎么办?网站SEO优化工具
  16. 和讯博客知名博主《猎杀黑马》作者王宁签售会圆满结束
  17. 十进制小数化为二进制小数的方法是什么_二进制的转换
  18. 为什么只能取出购票信息单_如何换取购票信息单 取票取出的是购票信息单
  19. 最终幻想之父——坂口博信 (转载自天幻网(www.SquareCN.com))
  20. 计算机二级excel服装采购表,计算机二级excel真题:制作采购成本分析表

热门文章

  1. python3.6安装教程-Python 3.6.6安装教程(附安装包) | 我爱分享网
  2. python程序设计报告-20183215 实验三《Python程序设计》实验报告
  3. python课程推荐-推荐几个优质的 Python 学习资料(良心推荐,非广告)
  4. python 画柱状图-Python 使用 matplotlib 画柱状图教程
  5. python手册中文版apk-python怎么打包apk
  6. python变量类型-python变量的数据类型有哪些?
  7. python怎么安装第三方库-怎样安装Python的第三方库
  8. python读什么英文-Python编程但英语差,能用中文吗?
  9. python解释器是什么-python解释器都有什么
  10. python使用函数的优点-Python函数的特点