把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析
因为自己到开发电脑转到Mac Air,之前的Webform/MVC应用在Mac 跑不起来,而且.Net Core 2.0 已经比较稳定了。
1. 为什么会有跨平台的.Net Core
近年来,我们已经进入云计算时代,在云平台的PaSS和SaSS上也是发生了大幅度的进化,以docker为代表。微软的Azure平台,google的GAE等等各大云计算厂商都提供了PaSS平台,我们的应用程序要迁移到这样的平台上都需要进行重写。Docker,给云计算带来一场革新,Docker可以被认为是互联网的集装箱,可以灵活地封装软件,令其更快速地传播。这对现代互联网来说是一件大事,因为软件都会运行上成百上千的机器上。Docker可以改变我们开发软件的方式,令每个人都能便捷地利用大量的运算能力。Docker可以让开发者专注于开发软件,不需要考虑在哪里运行自己的软件,这才是云计算的发展方向。开发者考虑应用本身就足够了。
以往的.NET 很难进入以docker为代表的云计算开发平台,特别是Windows不支持Docker,因为那完全是互联网服务的基石--Linux系统才有的技术,微软为了适应这样的云计算潮流,在Windows Server 2016/Windows 10上支持了docker,也重新开发跨平台.NET Core的应用运行平台。
2. 对Old .Neter, 如何尽快熟悉.Net Core 呢?
我们在vs.net 新建一个Empty Core solution, 看看程序入口program.cs,它还是一个console程序. 多引入了4个命名空间. ASP.NET Core应用的寄宿依赖于一个WebHost对象,通过对应的CreateDefaultBuilder的工厂方法创建启动一个WebHost, web服务器. 注册调用了StartUp类. 这个类里面会注册一些中间件.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace sso
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}
startup类里有configureServices和configure方法, 调用顺序是先ConfigureServices后Configure。
这2个的区别是: 其中和Dependecy Injection有关的方法是放在ConfigureServices()中,
Configure()是和Middleware相关的方法
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=398940
public 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)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
默认Empty的solution是只有一个Hello World,我们看一下典型的数据库应用,这个文件会是怎么样的,引入EF,MVC等中间件
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
}
如果要引入其他中间件,比如这个,可以参考下面文章.
ASP.NET Core 中间件之压缩、缓存
asp.net core 2.0 查缺补漏
中间件配置主要是用Run
、Map
和Use
方法进行配置,请参考这个文章 ASP.NET Core 运行原理剖析
犯了一个错误,在 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?tabs=aspnetcore2x 这里有提到
Don't call next.Invoke
after the response has been sent to the client. Changes to HttpResponse
after the response has started will throw an exception.
错误代码如下: 这个代码运行时会出错,错误是
该网页无法正常运作
localhost 意外终止了连接。
ERR_INCOMPLETE_CHUNKED_ENCODING
原文地址 http://www.cnblogs.com/zitjubiz/p/net_core_daily_1.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析相关推荐
- 把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog
Net Core 大量使用依赖注入(Dependency Inject), 打个比方,我们常用的日志组件有Log4Net,NLog等等. 如果我们要随时替换日志组件,那么代码中就不能直接引用某个组件的 ...
- 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0
今年五月的 Build 大会上,微软说 .NET Core 3.0 将带来 WPF / Windows Forms 这些桌面应用的支持.当然,是通过 Windows 兼容包(Windows Compa ...
- 新旧系统更替产生的数据迁移问题
新旧系统更替产生的数据迁移问题 作者:西安项目组夏凯撰文时间:2004.11.08 在信息化建设过程中,随着技术的发展,原有的信息系统不断被功能更强大的新系统所取代.从两层结构到三层结构,从Clien ...
- ASP.NET Core 3.0 迁移避坑指南
一.前言 .NET Core 3.0将会在 .NET Conf 大会上正式发布,截止今日发布了9个预览版,改动也是不少,由于没有持续关注,今天将前面开源的动态WebApi项目迁移到.NET Core ...
- power linux 安装系统,在Linux系统中安装/使用PowerShell Core 6.0
在微软爱上 Linux 之后,PowerShell 这个原本只是 Windows 才能使用的组件,于 2016 年 8 月 18 日开源并且成为跨平台软件,登陆了 Linux 和 macOS. Pow ...
- 与时俱进 | 博客现已运行在 .NET Core 3.0 及 Azure 上
点击上方蓝字关注"汪宇杰博客" 导语 9月23日,微软正式发布了 .NET Core 3.0,这个版本具有大量新功能和改进.我也在第一时间将自己的博客网站更新到了 .NET Cor ...
- .NET Core 3.0 正式公布:新特性详细解读
点击蓝字"dotNET匠人"关注我哟 加个"星标★",每日 7:15,好文必达! 作者丨Richard Lander 译者丨核子可乐 策划丨赵钰莹 近日,.NE ...
- 微软.Net Core 3.0 预览版7发布:大幅减少 SDK 空间大小
据悉,这个预览版是 .Net Core 3 中重要的版本,可以视为原计划在 7 月发布的 RC 版本 (引自微软 .NET Core 首席 Program Manager Richard 先生原话), ...
- ASP.NET Core 1.0中的管道-中间件模式
ASP.NET Core 1.0借鉴了Katana项目的管道设计(Pipeline).日志记录.用户认证.MVC等模块都以中间件(Middleware)的方式注册在管道中.显而易见这样的设计非常松耦合 ...
最新文章
- [转载]WebForm下使用 jQuery.loadUserControl异步load用户控件
- eclipse项目导入idea部署到tomcat
- 【经典重温】所有数据无需共享同一个卷积核!谷歌提出条件参数化卷积CondConv(附Pytorch复现代码)...
- linux怎么复制文件夹全部内容,linux局域网怎么复制文件夹下的全部文件到另外文件夹...
- python 伪多线程_Python实现简单多线程任务队列
- 《智能计算系统》课程报告——《An Efficient FPGA Accelerator Optimized for High Throughput Sparse CNN Inference》学习笔记
- SVN环境搭建详解(来源网络)
- Linux基础——怎么样从 MacOS 或 Linux 通过 SSH 远程 Linux
- 赛尔译文 | 基础模型的机遇与风险 (四)
- RxJava -- 从 create 开始 (一)
- Open Inventor Coin3D
- inode客户端linux 怎样运行,Ubuntu下安装iNode上网客户端
- Python 基础(一):入门必备知识
- Via板载声卡底噪严重、播放卡顿及耳机与扬声器音源切换问题【解决方法】
- Spring Cloud 基础教程 - 程序猿DD
- “我与女明星只差一个毛戈平”,毛戈平与上市又差什么?
- c++贪吃蛇源代码 完整版
- 2020-08-29 ---- 美团点评 笔试
- 图片工具picpick
- [转载]深入Windows NT/2000模块的组织 - 专题安全方向{ Security Research Papers } - 邪恶八进制信息安全团队技术讨论组 努力为祖国的信息安全撑起一片蓝天
热门文章
- 理解云计算备份与灾难恢复
- js温故而知新11(AJAX)——学习廖雪峰的js教程
- 【bayes】贝叶斯likelihood和model
- [存档]CxServer的项目周期管理
- .net 垃圾回收机制
- 面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)
- .NET6之MiniAPI(十九):NLog
- 想说爱你不容易 | 使用最小 WEB API 实现文件上传(Swagger 支持)
- ASP.NET Core Web API使用静态swagger.json文件
- MAUI安卓子系统调试方法(附安装教程)