1、使用Visual Studio创建.NET Core控制台应用程序
这里的话我再创建一个普通的控制台应用程序,与.NetCore控制台应用程序做对比。
两者的对比:
比较两个控制台应用程序的program.cs文件,会发现.netcore控制台应用程序没有引用更多的命名空间。
2、.netcore控制台应用程序——实现猜拳的功能:
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string[] fistType = new string[] { "石头","布","剪刀"};
Console.WriteLine("***************************趣味猜拳游戏***************************");
Console.WriteLine("请输入您的出拳数字(1-石头,2-布,3-剪刀,4-退出)");
string inputFist = Console.ReadLine();
while (inputFist!="4")
{
//电脑随机生成出拳
Random random = new Random();
int computerFist = (int)random.Next(1, 3);//随机数
try
{
int personFist = Convert.ToInt32(inputFist);
//判断数字是否是1-4的数字
if (personFist>0&&personFist<5)
{
//猜拳判断
if (personFist<computerFist)
{
if (personFist==1&&computerFist==3)
{
Console.WriteLine("你出了:{0},电脑出了:{1},结果你赢了!",fistType[personFist-1],fistType[computerFist-1]);
}
else
{
Console.WriteLine("你出了:{0},电脑出了:{1},结果电脑赢了!", fistType[personFist - 1], fistType[computerFist - 1]);
}
}
else if (personFist==computerFist)
{
Console.WriteLine("你出了:{0},电脑出了:{1},结果你和电脑平局!", fistType[personFist - 1], fistType[computerFist - 1]);
}
else
{
if (personFist==3&&computerFist==1)
{
Console.WriteLine("你出了:{0},电脑出了:{1},结果电脑赢了!", fistType[personFist - 1], fistType[computerFist - 1]);
}
else
{
Console.WriteLine("你出了:{0},电脑出了:{1},结果你赢了!", fistType[personFist - 1], fistType[computerFist - 1]);
}
}
}
else
{
Console.WriteLine("你输入的数字有错误,请重新输入……");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine("------------------------------------------------------------------------------------");
Console.WriteLine("请输入您的出拳数字(1-石头,2-布,3-剪刀,4-退出)");
inputFist = Console.ReadLine();
}
}
}
}
效果图:
3、.netcore控制台应用程序——实现万年历:
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("*****************************欢迎使用万年历*****************************");
Console.WriteLine("\n请选择年份:");
int year = int.Parse(Console.ReadLine());
Console.WriteLine("\n请选择月份:");
int month = int.Parse(Console.ReadLine());
int days = 0;//存储当月的天数
Boolean isRn;
//判断是否为闰年
if (year%4==0&&!(year%100==0)||year%400==0)
{
isRn = true;//闰年
}
else
{
isRn = false;//平年
}
//计算输入的年份之前的天数
int totalDays = 0;
for (int i = 1900; i < year; i++)
{
//判断闰年或平年,并进行天数累加
if (i%4==0&&!(i%100==0)||i%400==0)
{
totalDays = totalDays + 366;//闰年为366天
}
else
{
totalDays = totalDays + 365;//平年为365天
}
}
//计算输入月份之前的天数
int beforeDays = 0;
for (int i = 1; i <=month; i++)
{
switch (i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 2:
if (isRn)
{
days = 29;
}
else
{
days = 28;
}
break;
default:
days = 30;
break;
}
if (i<month)
{
beforeDays = beforeDays + days;
}
}
totalDays = totalDays + beforeDays;//距离1900年1月1日的天数
//计算星期几
//存储当月第一天是星期几:星期日为0,星期一到星期六为1-6
int firstDayOfMonth;
int temp = 1 + totalDays % 7;//从1900年1月1日起推算
if (temp==7)
{
//求当月第一天
firstDayOfMonth = 0;//周日
}
else
{
firstDayOfMonth = temp;
}
//输出日历
Console.WriteLine("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for (int nullNo = 0; nullNo < firstDayOfMonth; nullNo++)
{
Console.Write("\t");
//输出空格
}
for (int i = 1; i <= days; i++)
{
Console.Write(i+"\t");
if ((totalDays+i-1)%7==5)
{
//如果当天为周六,输出换行
Console.WriteLine();
}
}
Console.ReadLine();
}
}
}
4、ASP.NET Core 概述
ASP.NET Core 是一个跨平台的高性能开源框架,用于生成基于云且连接 Internet 网络的新式应用程序。
使用ASP.NET Core 可以实现以下需求:
(1)创建 Web 应用程序和服务、loT 应用和移动后端。
(2)在 Windows、macOS 和 Linux 上使用喜爱的开发工具。
(3)部署到云或本地。
(4)在.NET Core 或.NET Framework 上运行。
5、APS.NET Core 的优点
ASP.NET Core 是重新设计的 ASP.NET 4.X,微软重构了整个ASP.NET体系结构,形成了更精简的模块化框架,
它具有以下优点:
(1)Web UI 应用开发和 Web API 应用开发使用统一的编程模型。
(2)支持针对可测试性进行构建。
(3)Razor Pages 可以使页面的编码方式更简单高效。
(4)支持 Blazor 框架,Blazor 允许在浏览器中使用 C#和 JavaScript。共享全部使用.NET编写的服务器端和客户端应用逻辑。
(5)能够在 Windows、macOS 和 Linux 上进行开发和运行。
(6)支持开放源代码和以社区为中心。
(7)集成新式客户端框架和开发工作流。
(8)支持使用 gRPC 协议远程过程调用。
(9)基于环境的云就绪配置系统。
(10)内置依赖项注入。
(11)支持轻型的高性能模块化 HTTP 请求管道。
(12)能够托管到 Kestrel、IIS、HTTP.sys、Nginx、Apache 和 Docker 等服务器或容器中。
(13)支持并行版本控制。
(14)支持新式 Web 开发工具,如 Visual Studio Code。
6、创建.net core mvc项目
目录结构如下:
运行效果图:
ASP.NET Core 应用程序本质上是一个独立的控制台应用程序,它不是必须由 IIS 内部托管运行。
ASP.NET Core应用程序拥有一个内部的自托管(Self-Hosted)的 Web 服务器,由该服务器负责处理外部请求,这个 Web服务器称为 Kestrel Web 服务器,并且.NET Core 支持的所有平台和版本均支持 Kestrel。
ASP.NET Core 应用程序的程序入口在 Program.cs 的文件中,代码如下所示:
从上面代码可知,ASP.NET Core 应用程序的启动主要包含以下三个步骤:
(1)调用 CreateHostBuilder()方法创建 IWebHostBuilder 实例。
(2) 调用 Build()方法,IWebHostBuilder 实例负责创建 |WebHost 实例对象。
(3)调用 Run()方法,启动 1WebHost 实例。
在CreateHostBuilder()方法中,先通过 CreateDefaultBuilder()方法创建 IWebHostBuilder 实例,再
通过 ConfigureWebHostDefaults()方法来使用 Startup 类中所定义的环境、中间件和服务配置。
7、Startup类
ASP.NET Core 为开发者的应用程序提供了处理每个请求的完整控制,而 Startup 类是应用程序的入口(entrypoint),这个类可以设置配置(configuration)并且将应用程序中将要使用的服务连接起来,开发者可以在Startup 类中配置请求管道,该管道将用于处理应用程序的所有请求。
ASP.NET Core 会在主程序集中搜索名为“Startup”的类,开发者也可以指定一个其他程序集用于检索,只需要配置 Hosting:Application配置键。ASP.NET Core 并不关心 Startup 类是否定义为 public,如果它符合命名规范,ASP.NET 将继续加载它,如果有多个 Startup 类,也不会触发异常,ASP.NET将基于命名空间选择其中一个。
注意:
ASP-NET 将基于命名空间选择以匹配项目的框命名空间优先,否则使用第一个按字母排列的命名空间中的类。