如何通过ASP.NET Core实战篇快速入门并掌握Web开发技能?

2026-04-01 09:522阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1922个文字,预计阅读时间需要8分钟。

如何通过ASP.NET Core实战篇快速入门并掌握Web开发技能?

目录

1.留言板(MySQL的使用)

2.聊天室(WebSocket的使用)

3.查找工作(AngleSharp的使用)

4.部署多个站点

5.其他细节

6.部署阿里云

7.MySQL客户端端配置

8.获取IP

9.Nginx配置WebSocket

10.WebSocket心跳

目录
  • NO1 留言板(mysql的使用)
  • NO2 聊天室(WebSocket的使用)
  • NO3 找工作(AngleSharp的使用)
  • 部署多个站点
  • 一些其它的细节
    • 部署阿里云
    • mysql的客户端
    • 获取ip
    • WebSocket在nginx的配置
    • WebSocket心跳
    • 中文编码
    • asp.net core 端口分配
    • 爬拉勾数据

NO1 留言板(mysql的使用)

演示:haojima.net
这个功能很简单。就是对数据库的写入和展示。如果在Windows下,相信大家分分钟都可以搞定。而初次接触.net core + mysql可能需要注意些细节。

首先打开vs2017新建一个asp.net core项目(选Web应用程序),然后nuget 导入Microsoft.EntityFrameworkCore.Tools 1.1.1和MySql.Data.EntityFrameworkCore 8.0.8-dmr。
然后新建一个DbContext类。

public class DataContext : DbContext { //连接字符串一定要加 sslmode=none string str = @"Data Source=;Database=;User ID=;Password=;pooling=true;CharSet=utf8;port=3306;sslmode=none"; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseMySQL(str); //下面就可以添加要加入数据库的实体了 //public DbSet<Message> Messages { get; set; } }

到此为止,我们已经可以利用EF Core直接连接mysql进行增删改查操作了。注意:需要导入命名空间using Microsoft.EntityFrameworkCore; using MySQL.Data.EntityFrameworkCore.Extensions;

当然。你会说,连接字符串不能硬编码到代码里面。我们也可以放配置文件。appsettings.json

{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "ConnectionStrings": { "SqlServerConnection": "Data Source=;Database=;User ID=;Password=;pooling=true;CharSet=utf8;port=3306;sslmode=none" } }

然后把上面的硬编码注释掉。在Startup.cs文件的ConfigureServices方法添加

如何通过ASP.NET Core实战篇快速入门并掌握Web开发技能?

var connection = Configuration.GetConnectionString("SqlServerConnection"); services.AddDbContext<DataContext>(options => options.UseMySQL(connection));

项目名称和路径最好不要有中文,不然会出现些乱七八糟的问题。

:github.com/zhaopeiym/BlogDemoCode/tree/master/MessageBoard

NO2 聊天室(WebSocket的使用)

演示:socket.haojima.net

WebSocket是Html5新增的一个很酷的技术。下面我们简单讲解下这个很酷的技术

var Socket = new WebSocket(url);//创建 WebSocket 对象

创建了一个WebSocket对象后会触发打开连接事件:

Socket.onopen = function(){ }

除了onopen事件,还有其他三个事件:

Socket.onmessage //客户端接收服务端数据时触发 Socket.onerror //通信发生错误时触发 Socket.onclose //连接关闭时触发

另外还有两个方法:

Socket.send() //使用连接发送数据 Socket.close() //关闭连接

最后还有四个连接状态属性:

Socket.readyState 0 - 表示连接尚未建立。 1 - 表示连接已建立,可以进行通信。 2 - 表示连接正在进行关闭。 3 - 表示连接已经关闭或者连接不能打开。

整个WebSocket常用功能知识点就四个事件、两个方法、四种状态。简单吧,下面我们看看asp.net core后台的配合:

后台添加一个SocketHandler类,并添加一个静态方法Map:

/// <summary> /// 请求 /// </summary> /// <param name="app"></param> public static void Map(IApplicationBuilder app) { app.UseWebSockets(); //需要 nuget 导入 Microsoft.AspNetCore.WebSockets.Server app.Use(Acceptor); }

然后新增对应的Acceptor方法:

/// <summary> /// 接收请求 /// </summary> /// <param name="github.com/zhaopeiym/ChatRoom

NO3 找工作(AngleSharp的使用)

演示:job.haojima.net
对于爬虫抓包,我相信大家初次接触都非常的热衷于此。我也不例外。
那么在asp.net core下面是否也有这样的插件呢?答案是肯定的。
www.cnblogs.com/linezero/p/5599611.html HtmlAgilityPack HTML解析(感谢博主对.net core的贡献)。不过xpath用起来超级恶心。
之前在.net下面有一款Jumony www.cnblogs.com/Ivony/p/3447536.html(博客园大牛写的)。支持CSS选择和linq查询。简直不要太爽。可是不支持.net core。(本人试了下迁移.net core,发现很多类在.net core没有实现)
最后还是到了一款支持.net core的解析组件。并可以媲美Jumony,同样支持css选择和linq查询。那就是AngleSharp。
新建项目,nuget 安装 AngleSharp。然后以下简单使用:

using (HttpClient github.com/zhaopeiym/JobWanted

部署多个站点

以上,这些项目都比较简单。关键技术点和难点都进行的分析。我相信大家都可以动起手练习起来了。
不过有个问题,前面我们只说了部署一个应用程序。如果是多个该怎么部署呢?
首先我们把多个程序发布包放到服务器上。
然后修改nginx的配置文件/etc/nginx/conf.d/default.conf

server { listen 80; server_name www.haojima.net; #对应的域名 root /home/projects/messagBoard; #程序路径 location / { proxy_pass localhost:5000; #内网端口 proxy_help.aliyun.com/document_detail/25471.html 在安全组添加某端口哪些IP可以访问。

mysql的客户端

对于mysql,我们安装好之后总不能每次命令操作吧。在Windows下面有个客户端Navicat可以方便管理mysql。Navicat

获取ip

用了nginx后发现取不到浏览器IP了。那是因为我们程序都是浏览器访问nginx,然后nginx转发内网程序端口。所以取到的IP都是内网本机IP。如果需要取浏览器IP需要在nginx配置

server { listen 80; server_name www.haojima.net; root /home/projects/messagBoard; location / { proxy_pass localhost:5000; proxy_nginx.org/en/docs/localhost:5002; proxy_github.com/aspnet/KestrelHttpServer/issues/1263 } }

WebSocket心跳

经过上面的配置,我们的WebSocket在nginx上跑起来了。万分欢喜的我们,发现一分钟不发消息就自动掉线了。郁闷至极到头大。细心的同学通过上面的链接资料其实已经有说明:

By default, the connection will be closed if the proxied server does not transmit any data within 60 seconds. This timeout can be increased with the proxy_read_timeout directive. Alternatively, the proxied server can be configured to periodically send WebSocket ping frames to reset the timeout and check if the connection is still alive.

nginx给出了两种解决方案。第一种,修改proxy_read_timeout (默认60秒)。第二种,浏览器客户端定时发送心跳包(时间要短于proxy_read_timeout)。

我使用的是第二种方式。

第一种虽然简单粗暴,但是时间再长也是一个值,还是会有超时的可能。再者,谁能保证浏览器端不会new 很多个WebSocket出来捣蛋。

第二种方式,浏览器定时发送一条消息,内容和后台约定下。如发送“心跳”,然后后台接收消息是,判断如果是“心跳”则不做任何处理。

中文编码

在做“找工作”爬前程无忧的数据时,发现他们使用的GBK编码。而在.net core中默认不支持这种格式,导致取到的数据都是乱码。我们需要nuget安装System.Text.Encoding.CodePages。然后在Startup.cs的Configure里面注册:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//注册编码提供程序

使用:

var htmlBytes = await *:5002" }

在Program.cs文件修改

public static void Main(string[] args) { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("hosting.json", optional: true) .Build(); var host = new WebHostBuilder() .UseKestrel() .UseConfiguration(config) .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .UseApplicationInsights() .Build(); host.Run(); }

爬拉勾数据

在爬拉勾网的时候没有搞定,不知道是不是因为www.lagou.com/zhaopin/Java/?labelWords=label"; var htmlString = await github.com/zhaopeiym/JobWanted/blob/master/JobWanted/Controllers/JobsController.cs#L211 //拉勾网 后台检测了user-agent、X-Requested-With、Referer还会检测list_是否有参数 www.lagou.com/jobs/list_.net"); haojima.net
socket.haojima.net
job.haojima.net

源码
github.com/zhaopeiym/JobWanted
github.com/zhaopeiym/ChatRoom
github.com/zhaopeiym/BlogDemoCode

以上就是ASP.NET Core快速入门之实战篇的详细内容,更多关于ASP.NET Core实战的资料请关注易盾网络其它相关文章!

本文共计1922个文字,预计阅读时间需要8分钟。

如何通过ASP.NET Core实战篇快速入门并掌握Web开发技能?

目录

1.留言板(MySQL的使用)

2.聊天室(WebSocket的使用)

3.查找工作(AngleSharp的使用)

4.部署多个站点

5.其他细节

6.部署阿里云

7.MySQL客户端端配置

8.获取IP

9.Nginx配置WebSocket

10.WebSocket心跳

目录
  • NO1 留言板(mysql的使用)
  • NO2 聊天室(WebSocket的使用)
  • NO3 找工作(AngleSharp的使用)
  • 部署多个站点
  • 一些其它的细节
    • 部署阿里云
    • mysql的客户端
    • 获取ip
    • WebSocket在nginx的配置
    • WebSocket心跳
    • 中文编码
    • asp.net core 端口分配
    • 爬拉勾数据

NO1 留言板(mysql的使用)

演示:haojima.net
这个功能很简单。就是对数据库的写入和展示。如果在Windows下,相信大家分分钟都可以搞定。而初次接触.net core + mysql可能需要注意些细节。

首先打开vs2017新建一个asp.net core项目(选Web应用程序),然后nuget 导入Microsoft.EntityFrameworkCore.Tools 1.1.1和MySql.Data.EntityFrameworkCore 8.0.8-dmr。
然后新建一个DbContext类。

public class DataContext : DbContext { //连接字符串一定要加 sslmode=none string str = @"Data Source=;Database=;User ID=;Password=;pooling=true;CharSet=utf8;port=3306;sslmode=none"; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseMySQL(str); //下面就可以添加要加入数据库的实体了 //public DbSet<Message> Messages { get; set; } }

到此为止,我们已经可以利用EF Core直接连接mysql进行增删改查操作了。注意:需要导入命名空间using Microsoft.EntityFrameworkCore; using MySQL.Data.EntityFrameworkCore.Extensions;

当然。你会说,连接字符串不能硬编码到代码里面。我们也可以放配置文件。appsettings.json

{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "ConnectionStrings": { "SqlServerConnection": "Data Source=;Database=;User ID=;Password=;pooling=true;CharSet=utf8;port=3306;sslmode=none" } }

然后把上面的硬编码注释掉。在Startup.cs文件的ConfigureServices方法添加

如何通过ASP.NET Core实战篇快速入门并掌握Web开发技能?

var connection = Configuration.GetConnectionString("SqlServerConnection"); services.AddDbContext<DataContext>(options => options.UseMySQL(connection));

项目名称和路径最好不要有中文,不然会出现些乱七八糟的问题。

:github.com/zhaopeiym/BlogDemoCode/tree/master/MessageBoard

NO2 聊天室(WebSocket的使用)

演示:socket.haojima.net

WebSocket是Html5新增的一个很酷的技术。下面我们简单讲解下这个很酷的技术

var Socket = new WebSocket(url);//创建 WebSocket 对象

创建了一个WebSocket对象后会触发打开连接事件:

Socket.onopen = function(){ }

除了onopen事件,还有其他三个事件:

Socket.onmessage //客户端接收服务端数据时触发 Socket.onerror //通信发生错误时触发 Socket.onclose //连接关闭时触发

另外还有两个方法:

Socket.send() //使用连接发送数据 Socket.close() //关闭连接

最后还有四个连接状态属性:

Socket.readyState 0 - 表示连接尚未建立。 1 - 表示连接已建立,可以进行通信。 2 - 表示连接正在进行关闭。 3 - 表示连接已经关闭或者连接不能打开。

整个WebSocket常用功能知识点就四个事件、两个方法、四种状态。简单吧,下面我们看看asp.net core后台的配合:

后台添加一个SocketHandler类,并添加一个静态方法Map:

/// <summary> /// 请求 /// </summary> /// <param name="app"></param> public static void Map(IApplicationBuilder app) { app.UseWebSockets(); //需要 nuget 导入 Microsoft.AspNetCore.WebSockets.Server app.Use(Acceptor); }

然后新增对应的Acceptor方法:

/// <summary> /// 接收请求 /// </summary> /// <param name="github.com/zhaopeiym/ChatRoom

NO3 找工作(AngleSharp的使用)

演示:job.haojima.net
对于爬虫抓包,我相信大家初次接触都非常的热衷于此。我也不例外。
那么在asp.net core下面是否也有这样的插件呢?答案是肯定的。
www.cnblogs.com/linezero/p/5599611.html HtmlAgilityPack HTML解析(感谢博主对.net core的贡献)。不过xpath用起来超级恶心。
之前在.net下面有一款Jumony www.cnblogs.com/Ivony/p/3447536.html(博客园大牛写的)。支持CSS选择和linq查询。简直不要太爽。可是不支持.net core。(本人试了下迁移.net core,发现很多类在.net core没有实现)
最后还是到了一款支持.net core的解析组件。并可以媲美Jumony,同样支持css选择和linq查询。那就是AngleSharp。
新建项目,nuget 安装 AngleSharp。然后以下简单使用:

using (HttpClient github.com/zhaopeiym/JobWanted

部署多个站点

以上,这些项目都比较简单。关键技术点和难点都进行的分析。我相信大家都可以动起手练习起来了。
不过有个问题,前面我们只说了部署一个应用程序。如果是多个该怎么部署呢?
首先我们把多个程序发布包放到服务器上。
然后修改nginx的配置文件/etc/nginx/conf.d/default.conf

server { listen 80; server_name www.haojima.net; #对应的域名 root /home/projects/messagBoard; #程序路径 location / { proxy_pass localhost:5000; #内网端口 proxy_help.aliyun.com/document_detail/25471.html 在安全组添加某端口哪些IP可以访问。

mysql的客户端

对于mysql,我们安装好之后总不能每次命令操作吧。在Windows下面有个客户端Navicat可以方便管理mysql。Navicat

获取ip

用了nginx后发现取不到浏览器IP了。那是因为我们程序都是浏览器访问nginx,然后nginx转发内网程序端口。所以取到的IP都是内网本机IP。如果需要取浏览器IP需要在nginx配置

server { listen 80; server_name www.haojima.net; root /home/projects/messagBoard; location / { proxy_pass localhost:5000; proxy_nginx.org/en/docs/localhost:5002; proxy_github.com/aspnet/KestrelHttpServer/issues/1263 } }

WebSocket心跳

经过上面的配置,我们的WebSocket在nginx上跑起来了。万分欢喜的我们,发现一分钟不发消息就自动掉线了。郁闷至极到头大。细心的同学通过上面的链接资料其实已经有说明:

By default, the connection will be closed if the proxied server does not transmit any data within 60 seconds. This timeout can be increased with the proxy_read_timeout directive. Alternatively, the proxied server can be configured to periodically send WebSocket ping frames to reset the timeout and check if the connection is still alive.

nginx给出了两种解决方案。第一种,修改proxy_read_timeout (默认60秒)。第二种,浏览器客户端定时发送心跳包(时间要短于proxy_read_timeout)。

我使用的是第二种方式。

第一种虽然简单粗暴,但是时间再长也是一个值,还是会有超时的可能。再者,谁能保证浏览器端不会new 很多个WebSocket出来捣蛋。

第二种方式,浏览器定时发送一条消息,内容和后台约定下。如发送“心跳”,然后后台接收消息是,判断如果是“心跳”则不做任何处理。

中文编码

在做“找工作”爬前程无忧的数据时,发现他们使用的GBK编码。而在.net core中默认不支持这种格式,导致取到的数据都是乱码。我们需要nuget安装System.Text.Encoding.CodePages。然后在Startup.cs的Configure里面注册:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//注册编码提供程序

使用:

var htmlBytes = await *:5002" }

在Program.cs文件修改

public static void Main(string[] args) { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("hosting.json", optional: true) .Build(); var host = new WebHostBuilder() .UseKestrel() .UseConfiguration(config) .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .UseApplicationInsights() .Build(); host.Run(); }

爬拉勾数据

在爬拉勾网的时候没有搞定,不知道是不是因为www.lagou.com/zhaopin/Java/?labelWords=label"; var htmlString = await github.com/zhaopeiym/JobWanted/blob/master/JobWanted/Controllers/JobsController.cs#L211 //拉勾网 后台检测了user-agent、X-Requested-With、Referer还会检测list_是否有参数 www.lagou.com/jobs/list_.net"); haojima.net
socket.haojima.net
job.haojima.net

源码
github.com/zhaopeiym/JobWanted
github.com/zhaopeiym/ChatRoom
github.com/zhaopeiym/BlogDemoCode

以上就是ASP.NET Core快速入门之实战篇的详细内容,更多关于ASP.NET Core实战的资料请关注易盾网络其它相关文章!