带你做 WebAPI 迁移 ASP.NET Core 2.0

Posted DotNet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你做 WebAPI 迁移 ASP.NET Core 2.0相关的知识,希望对你有一定的参考价值。


来源:Eric zhou

cnblogs.com/tianqing/p/7606011.html


随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中。


我们有必要先说一下ASP.NET Core。ASP.NET Core 是新一代的 ASP.NET,第一次出现时的代号为 ASP.NET vNext,后来命名为ASP.NET 5,随着它的完善与成熟,最终命名为 ASP.NET Core,这表明它已不是 ASP.NET 的升级,而是一个重新设计的Web开发框架。


而它一个非常重要的变化就是它不再依赖于IIS,而是一个独立的自寄宿的控制台应用程序,这也是它可以跨平台的根本。


两个关键词:IIS解耦和独立自寄宿的控制台应用程序。


我们对比一下ASP.NET和ASP.NET Core。ASP.NET 是强依赖于Windows IIS的,因为System.Web 中有很多方法都是直接调用的 IIS相关的 API,同时它还是驻留在IIS进程中的。然而 ASP.NET Core 运行时则是一个完全独立的控制台应用程序,它有自己的 Kestrel Server,可以直接对外部提供服务。


不过当前已有的 Kestrel Server 的功能相对比较简单,所以我们还是需要一个反向代理服务器将 Kestrel 服务器保护起来。


因此,部署在Linux环境下,可以考虑nginx+Kestrel Server的组合,Windows环境下,支持和IIS的直接集成(UseIISIntegration),部署在IIS中。


我们进入今天的主题,将原有ASP.NET WebAPI工程迁移到ASP.NET Core 2.0.


一、ASP.NET Core WebAPI工程


打开VS2017(版本一定要大于15.3),新建项目:ASP.NET Core Web应用程序



带你做 WebAPI 迁移 ASP.NET Core 2.0


新建后的解决方案和工程:


带你做 WebAPI 迁移 ASP.NET Core 2.0


二、ASP.NET Core WebHost构造和运行


大家可以发现,有了Program.cs类,有了Main函数,控制台应用程序就可以运行了。


带你做 WebAPI 迁移 ASP.NET Core 2.0


继续看,构造并启动了一个WebHost. 疑问来了,WebHost是什么机制?如果构造的?


WebHost.CreateDefaultBuilder是在ASP.NET Core 2.0中新增的,在Microsoft.AspNetCore命名空间下。我们看一下CreateDefaultBuilder的源码:


带你做 WebAPI 迁移 ASP.NET Core 2.0


带你做 WebAPI 迁移 ASP.NET Core 2.0

带你做 WebAPI 迁移 ASP.NET Core 2.0


带你做 WebAPI 迁移 ASP.NET Core 2.0


带你做 WebAPI 迁移 ASP.NET Core 2.0


2. 迁移Controller和Model


在新建的工程中复刻已有的Controller和Model的,例如:


带你做 WebAPI 迁移 ASP.NET Core 2.0


3. 迁移各类Attribute,属性标签,例如:本例中的自定义异常处理标签


带你做 WebAPI 迁移 ASP.NET Core 2.0


4. 迁移Web.Config


为了更好的兼容.NET 原有的配置文件和配置系统。虽然提供了Nuget:

System.Configuration.ConfigurationManager


但是实际上,Web.Config是为了IIS而设计的,在新的ASP.NET Core中推荐使用appSettings.json替换改造。即:将XML化的配置文件修改为JSON配置文件。


核心的NameSpace:Microsoft.Extensions.Configuration

具体可以参考微软的官方资料:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration


带你做 WebAPI 迁移 ASP.NET Core 2.0


配置读取示例:


带你做 WebAPI 迁移 ASP.NET Core 2.0


5. WebAPI自定义路由重写


在很多WebApi项目中,采用了自定义路由,例如我们的CommonController,自定义路由在ASP.NET Core2.0中如何支持的呢?


在StartUp类中,提供Configure方法:


带你做 WebAPI 迁移 ASP.NET Core 2.0


在这里,我们加入自定义路由配置,对应我们刚才的CommonController:


带你做 WebAPI 迁移 ASP.NET Core 2.0


6. IHttpModule扩展迁移ASP.NET Core2.0


在ASP.NET Core2.0中提供了中间件的概念,支持请求和响应之间的链式扩展:


带你做 WebAPI 迁移 ASP.NET Core 2.0


具体可以参考微软官方资料:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware

https://docs.microsoft.com/en-us/aspnet/core/migration/http-modules


这里,示例一下我们自己写的自定义中间件:


带你做 WebAPI 迁移 ASP.NET Core 2.0


这里巧妙的通过扩展方法的方式,扩展了接口IApplicationBuilder,

同时在StartUp的Configure方法中加载扩展的自定义中间件:


 

以上就是我们在将WebAPI站点迁移到ASP.NET Core2.0中用到的点滴技术,分享给大家。


看完本文有收获?请转发分享给更多人

关注「DotNet」,提升.Net技能 

以上是关于带你做 WebAPI 迁移 ASP.NET Core 2.0的主要内容,如果未能解决你的问题,请参考以下文章

将 Asp.Net Core 2.2 App 迁移到 3.1 时的整数序列化 [关闭]

将 CORS 迁移到 WebAPI 中的代码背后的动机是啥?

如何将 Web API 添加到现有的 ASP.NET MVC (5) Web 应用程序项目中?

ASP.NET Core 3.1 Web API(版本控制)和 Swagger UI 在发布到 Azure 后由于 MvcJsonOptions 而失败

在Asp.Net Core中使用ModelConvention实现全局过滤器隔离

选择 webApi 模板时如何将 ASP.Net 身份添加到 Asp.Net Core?