浅谈从ASP.NET Core2.2到3.0你可能会遇到这些问题

趁着假期的时间所以想重新学习下微软的官方文档来巩固下基础知识。我们都知道微软目前已经发布了.NET Core3.0的第三个预览版,同时我家里的电脑也安装了vs2019。So,就用vs2019+.NET Core3.0来跟着做一下Contoso University这个WEB应用,但是在基于3.0进行操作的时候遇到了一些问题,所以我就查看了微软的《从 ASP.NET Core 迁移 2.2 到 3.0 预览版 2》这篇文档,就着今天遇到的问题,所以我整理下,希望对大伙有所帮助,当然大伙也可以直接阅读微软的官方文档进行查看。但是我在阅读官方说明的时候,总感觉翻译的不是很准确,读起来很拗口,所以这里我是自己的理解对官方文档的一个补充。

我遇到的问题

ASP.NET Core2.0时代,若要为项目添加 EF Core 支持,需要安装相应的数据库驱动包。 教程中使用 SQL Server,相关驱动包Microsoft.EntityFrameworkCore.SqlServer。 此包包含在 Microsoft.AspNetCore.App 元包中,因此,如果应用具有对 Microsoft.AspNetCore.App 包的包引用,则无需引用该包。而2.0中的模板项目会自动为我们加载Mcrosoft.AspNetCore.App这个包的。但是3.0中没有了这个Mcrosoft.AspNetCore.App这个包,模块化的更彻底了!所需要的EF相关的包需要你自己来进行引用。

2.0升3.0升级指南

就着今天遇到的问题,所以我整理下ASP.NET Core从2.0升级3.0的一个升级指南,希望对大伙有所帮助,当然大伙也可以直接阅读微软的官方文档进行查看。但是我在阅读官方说明的时候,总感觉翻译的不是很准确,读起来很拗口,所以这里我是自己的理解对官方文档的一个补充。

更新项目文件

设置TargetFramework到netcoreapp3.0:

<TargetFramework>netcoreapp3.0</TargetFramework>

删除Microsoft.AspNetCore.All或Microsoft.AspNetCore.App元包的任何<PackageReference>。

将<PackageReference>元素中剩余的Microsoft.AspNetCore.*程序包更新到当前的预览版中 (例如,3.0.0-preview3.19128.7)。

如果没有对应的 3.0 版本的包,则说明包可能会在 3.0 中弃用。 其中许多之前都属于Microsoft.AspNetCore.App并且不需要单独引用的包,如上面我遇到的问题,关于SQL Server的EF相关的包。 具体的不再在 3.0 中生成的包的列表,请参阅aspnet/AspNetCore #3756。

某些程序集已从2.x和3.0之间的Microsoft.aspnetcore.app中删除。如果您正在使用aspnet/AspNetCore #3755中列出的包中的API,则可能需要单独添加到。

例如,Microsoft.EntityFrameworkCore和System.Data.SqlClient不再属于Microsoft.AspNetCore.App得一部分。 Microsoft.aspnetcore.app中的程序集列表尚未定稿,将在3.0 RTM之前更改。

添加Json.NET 支持。

项目默认为 ASP.NET Core 3.0 或更高版本设置为进程内承载模型。 当然,如果其值为InProcess您还可以通过删除<AspNetCoreHostingModel>元素,来进行修改。

作为提高ASP.NET Core 共享的框架工作的一部分,Json.NET已从 ASP.NET Core 共享框架中删除。

若要在 ASP.NET Core 3.0 项目中使用 Json.NET:

添加到包引用Microsoft.AspNetCore.Mvc.NewtonsoftJson

更新ConfigureServices调用AddNewtonsoftJson()。

services.AddMvc()
 .AddNewtonsoftJson();

Newtonsoft 的个性化设置可以设置为AddNewtonsoftJson:

services.AddMvc()
 .AddNewtonsoftJson(options =>
   options.SerializerSettings.ContractResolver =
    new CamelCasePropertyNamesContractResolver());

HostBuilder 替换 WebHostBuilder

使用 ASP.NET Core 3.0 模板泛型宿主。 早期版本使用Web 主机。 下面的代码显示了生成 ASP.NET Core 3.0 模板Program类:

public class Program
{
 public static void Main(string[] args)
 {
  CreateHostBuilder(args).Build().Run();
 }

 public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
   .ConfigureWebHostDefaults(webBuilder =>
   {
    webBuilder.UseStartup<Startup>();
   });
}

下面的代码演示模板生成 ASP.NET Core 2.2Program类:

public class Program
{
 public static void Main(string[] args)
 {
  CreateWebHostBuilder(args).Build().Run();
 }

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  WebHost.CreateDefaultBuilder(args)
   .UseStartup<Startup>();
}

IWebHostBuilder 将保留在 3.0,是一种webBuilder上面的代码示例所示。 WebHostBuilder 将在未来版本中弃用并替换为HostBuilder。

从WebHostBuilder到HostBuilder最显著的变化是依赖关系注入 (DI)。 使用时HostBuilder,只能将IConfigurationIHostingEnvironment注入到Startup的构造函数中。 HostBuilder DI 约束:

  1. 使DI容器只能构建一次。
  2. 避免产生的对象生存期问题,例如解决多个单例实例。

更新 SignalR 代码

如果您调用AddJsonProtocol,将其替换为AddNewtonsoftJsonProtocol。

以下示例显示更改前后的服务器代码:

services.AddSignalR(...)
  .AddJsonProtocol(...) // 2.2
services.AddSignalR(...)
  .AddNewtonsoftJsonProtocol(...) // 3.0

以下示例显示更改前后的.NET客户端代码:

connection = new HubConnectionBuilder()
 .WithUrl(...)
 .AddJsonProtocol(...) // 2.2
 .Build()
connection = new HubConnectionBuilder()
 .WithUrl(...)
 .AddNewtonsoftJsonProtocol(...) // 3.0
 .Build()

选择启用运行时编译

在 3.0 中,运行时编译是可选的方案。 若要启用运行时编译,请参阅ASP.NET Core 中的 Razor 文件编译。

总结

感觉微软在努力实现ASP.NET Core的模块化,减小各种依赖,让包变得更小。同时ASP.NET Core也已经很完善了,大伙是时候用起来ASP.NET Core了。另外需要说明的一点是,大伙如果是为了体验ASP.NET Core3.0的话,现在就可以,如果是用在生产环境的话最好还是等待正式版的发布吧。

以上所述是小编给大家介绍的ASP.NET Core2.2到3.0可能会遇到的问题详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • ASP.NET Core 3.0迁移的完美避坑指南

    一.前言 .NET Core 3.0将会在 .NET Conf 大会上正式发布,截止今日发布了9个预览版,改动也是不少,由于没有持续关注,今天将前面开源的动态WebApi项目迁移到.NET Core 3.0还花了不少时间踩坑,给大家分享一下我在迁移过程中遇到的坑.迁移的版本是当前Release最新版本 .NET Core 2.2 到 .NET Core 3.0 Preview 9. 二.ASP.NET Core 项目迁移 官方迁移文档:从 ASP.NET Core 2.2 迁移到3.0 ,这个官

  • 浅谈从ASP.NET Core2.2到3.0你可能会遇到这些问题

    趁着假期的时间所以想重新学习下微软的官方文档来巩固下基础知识.我们都知道微软目前已经发布了.NET Core3.0的第三个预览版,同时我家里的电脑也安装了vs2019.So,就用vs2019+.NET Core3.0来跟着做一下Contoso University这个WEB应用,但是在基于3.0进行操作的时候遇到了一些问题,所以我就查看了微软的<从 ASP.NET Core 迁移 2.2 到 3.0 预览版 2>这篇文档,就着今天遇到的问题,所以我整理下,希望对大伙有所帮助,当然大伙也可以直接

  • 浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑

    前言 绝大多数网站都集成了第三方登录,降低了注册门槛,增强了用户体验.最近看了看 QQ 互联上 QQ 登录的接口文档.接入 QQ 登录的一般流程呢,是这样的:先申请开发者 -> 然后创建应用(拿到一组 AppId 和 AppKey)-> 获取 access_token -> 获取 openid -> 调用 openApi 访问或修改用户信息. 然而,从申请个人开发者开始,坑就来了. 1. 申请(个人)开发者 QQ 互联中申请开发者信息的页面,一些重点太过简陋,缺失细节,比如身份证正

  • 浅谈C语言数组元素下标为何从0开始

    很多同学可能在学习数组时会有这个疑问,下标为什么不从1开始呢?从1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个.的确,有些计算机语言如早期的Pascal语言,数组元素的下标是从1开始的.难道是C语言故意要与众不同?要弄清楚这个问题,得先看一下计算机底层是怎样处理数组元素的.我们先编写了一个小程序,然后在visual studio中对其进行了反汇编.源程序和反汇编后的部分代码如下: 源程序: int arr[5];  //一个全局数组 int main() {    int

  • 浅谈ASP.NET MVC 防止跨站请求伪造(CSRF)攻击的实现方法

    在HTTP POST请求中,我们多次在View和Controller中看下如下代码: 1.View中调用了Html.AntiForgeryToken(). 2.Controller中的方法添加了[ValidateAntiForgeryToken]注解. 这样看似一对的写法其实是为了避免引入跨站请求伪造(CSRF)攻击. 这种攻击形式大概在2001年才为人们所认知,2006年美国在线影片租赁网站Netflix爆出多个CSRF漏洞,2008年流行的视频网址YouTube受到CSRF攻击,同年墨西哥一

  • 浅谈ASP.NET Core 中jwt授权认证的流程原理

    1,快速实现授权验证 什么是 JWT ?为什么要用 JWT ?JWT 的组成? 这些百度可以直接找到,这里不再赘述. 实际上,只需要知道 JWT 认证模式是使用一段 Token 作为认证依据的手段. 我们看一下 Postman 设置 Token 的位置. 那么,如何使用 C# 的 HttpClient 访问一个 JWT 认证的 WebAPI 呢? 下面来创建一个 ASP.NET Core 项目,尝试添加 JWT 验证功能. 1.1 添加 JWT 服务配置 在 Startup.cs 的 Confi

  • 浅谈AjaxPro.dll,asp.net 前台js调用后台方法

    1.什么是Ajax Ajax是异步Javascript和XML(Asynchronous JavaScript and XML)的英文缩写."Ajax"这个名词的发明人是Jesse James Garrett,而大力推广并且使Ajax技术炙手可热的是Google.Ajax的核心理念在于使用XMLHttpRequest对象发送异步请求. 2.为什么使用 Ajax减轻服务器的负担.Ajax的原则是"按需取数据",可以最大程序地减少冗余请求,减轻服务器的负担. 无需刷新页

  • [Asp.Net Core] 浅谈Blazor Server Side

    在2016年, 本人就开始了一个内部项目, 其特点就是用C#构建DOM树, 然后把DOM同步到浏览器中显示. 并且在一些小工程中使用. 3年下来, 效果很不错, 但因为是使用C#来构建控件树, 在没有特定语法的情况下, 代码风格不是那么好. 典型的风格大概是这样的: 这个模式挺好的, 有点嫌弃C#代码占比太高, HTML代码靠字符串来完成, 在界面的设计上, 比较吃力. 在2019年秋, Asp.Net 3.0出来了, Blazor Server Side 也正式公布, 可以在VS2019中使用

  • 浅谈ASP.NET Core静态文件处理源码探究

    前言 静态文件(如 HTML.CSS.图像和 JavaScript)等是Web程序的重要组成部分.传统的ASP.NET项目一般都是部署在IIS上,IIS是一个功能非常强大的服务器平台,可以直接处理接收到的静态文件处理而不需要经过应用程序池处理,所以很多情况下对于静态文件的处理程序本身是无感知的.ASP.NET Core则不同,作为Server的Kestrel服务是宿主到程序上的,由宿主运行程序启动Server然后可以监听请求,所以通过程序我们直接可以处理静态文件相关.静态文件默认存储到项目的ww

  • 浅谈ASP.NETCore统一处理404错误都有哪些方式

    目录 方式一 方式二 自定义通配路由 方式三 方式四 方式五 web.config <customErrors> 节点中配置ASP.NET管道处理404错误 总结 当未找到网页并且应用程序返回 404 错误时,ASP.NET Core MVC 仅呈现通用浏览器错误页面,如下图所示 这不是很优雅,是吗?我们平时看到的404页面一般是这样的 还有这样的 试了下京东,地址不存在的时候是会重定向到首页 下面就来演示下ASP.NET Core中如何实现这种自定义的404页面处理. 新建项目 ASP.NE

  • 浅谈JavaScript 浏览器对象

    window window对象不但充当全局作用域,而且表示浏览器窗口. window对象有innerWidth和innerHeight属性,可以获取浏览器窗口的内部宽度和高度.内部宽高是指除去菜单栏.工具栏.边框等占位元素后,用于显示网页的净宽高.还有一个outerWidth和outerHeight属性,可以获取浏览器窗口的整个宽高. 补充: 网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:

随机推荐