ASP.NET Core 教程是 ASP.NET Core 框架的入门教程,该框架用于在 C# 中构建跨平台的 Web 应用。 本教程使用 ASP.NET Core 框架 1.1.0 版。
ASP.NET Core 是一个跨平台,高性能,开放源代码框架,用于构建现代的,基于云的,互联网连接的应用。 ASP.NET Core 是对传统 ASP.NET 框架的重新设计。 您可以在使用 ASP Core 开发 ERP 软件中找到有关 ASP.NET Core 的更多信息。
ASP.NET Core 应用可以在 Windows,Linux 和 Mac 上运行。
以下是 ASP.NET Core 的主要功能:
- 带有 NuGet 包的模块化设计
- 跨平台开发
- 开源和基于社区
- 云端架构
- 内置依赖注入
- 与流行的前端技术集成
第一步是为您的操作系统安装.NET Core 命令行工具。 在 Github 存储库上可以找到安装说明。
$ sudo sh -c 'echo "deb [arch=amd64] http://apt-mo.trafficmanager.net/repos/dotnet/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
$ sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
$ sudo apt-get update
我们向 Ubuntu 添加了一个新的非官方存储库。
$ sudo apt-get install dotnet-dev-1.1.0
我们安装dotnet
命令行工具。
我们通过在 C# 中创建一个简单的控制台应用来测试安装。
$ dotnet new console -o consapp
Content generation time: 247.1035 ms
The template "Console Application" created successfully.
$ cd consapp/
$ ls
consapp.csproj Program.cs
使用dotnet
命令,我们创建一个新的控制台应用项目。
consapp.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
</Project>
这是项目配置文件。
Program.cs
using System;
namespace consapp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Console application");
}
}
}
这是一个简单的 C# 程序。
$ dotnet restore
使用dotnet restore
命令,下载必要的依赖项。 它调用 NuGet(.NET 包管理器)以还原依赖关系树。 NuGet 将分析consapp.csproj
文件,下载文件中所述的依赖项(或从计算机上的缓存中获取它们),然后写入obj/project.assets.json
文件。 project.assets.json
文件是编译和运行程序所必需的。
$ dotnet build
Microsoft (R) Build Engine version 15.1.1012.6693
Copyright (C) Microsoft Corporation. All rights reserved.
consapp -> /home/janbodnar/prog/dotnet/consapp/bin/Debug/netcoreapp1.1/consapp.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:06.34
我们使用dotnet build
命令来构建程序。
$ dotnet run
Console application
最后,我们使用dotnet run
运行程序。
Visual Studio Code 是 Microsoft 为 Windows,Linux 和 MacOS 开发的源代码编辑器。 它包括对调试,嵌入式 Git 控制,语法突出显示,智能代码完成,代码段和代码重构的支持。 它可以用于开发 ASP.NET Core 应用。 可以从网页下载 Visual Studio 代码。
如果选择 Visual Studio Code,则还需要安装 OmniSharp C# 扩展。
在以下应用中,我们创建一个简单的 ASP.NET Core 应用。
$ dotnet new web -o SimpleApp
Content generation time: 221.9237 ms
The template "ASP.NET Core Empty" created successfully.
使用dotnet new web
命令创建一个新的 Web 应用。
$ cd SimpleApp
$ dotnet restore
我们使用dotnet restore
命令恢复包。
Program.cs
using System.IO;
using Microsoft.AspNetCore.Hosting;
namespace SimpleApp
{
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
host.Run();
}
}
}
ASP.NET Core 应用是一个控制台应用,可以通过Main
方法创建 Web 服务器。 我们创建一个 Web 应用主机。 它使用 Kestrel Web 服务器。 Build
和Run
方法构建了IWebHost
对象,该对象将托管应用并开始监听传入的 HTTP 请求。 主机是 Web 服务器的包装器。
WebHostBuilder
上的UseStartup
方法为您的应用指定启动类。 Startup
类必须是公共类,并且必须具有两个方法:ConfigureServices
和Configure
。 ConfigureServices
定义了诸如 MVC 框架或 Entity Framework Core 之类的服务。 Configure
定义了请求管道中的中间件。 中间件是一个处理请求和响应的应用组件。
Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace SimpleApp
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello there");
});
}
}
}
Startup
类以简单消息响应请求。
loggerFactory.AddConsole();
我们添加一个控制台记录器。
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
在开发模式下,我们使用开发者异常页面。
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello there");
});
我们向请求添加最终处理器。 处理器以文本消息响应。 WriteAsync
创建一个特定的线程来处理请求。 WriteAsync
方法使用 UTF-8 将给定的文本异步写入响应主体流。
$ dotnet run
Hosting environment: Production
Content root path: /home/janbodnar/prog/dotnet/SimpleApp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
我们使用dotnet run
命令运行该应用。 该应用已启动,将在端口 5000 上监听。
$ curl localhost:5000
Hello there
我们使用curl
工具创建了一个请求,应用以文本消息响应。
在下一个应用中,我们设置一个使用 MVC 模式的 ASP.NET Core 应用。
模型-视图-控制器(MVC)架构模式将应用分为三个区域:模型,视图和控制器。 该模式有助于建立关注点分离。
$ dotnet new web -o WebApp
$ cd WebApp
我们创建一个 ASP.NET Core 应用。
$ mkdir Views Controllers
我们为视图和控制器创建两个目录。
$ dotnet add package Microsoft.AspNetCore.Mvc -v 1.1.3
我们将Microsoft.AspNetCore.Mvc
包添加到项目中。
$ dotnet add package Microsoft.AspNetCore.StaticFiles -v 1.1.2\. This
package adds support for MVC.
我们将Microsoft.AspNetCore.StaticFiles
包添加到项目中。 该包增加了处理静态文件的能力。
WebApp.csproj
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.2" />
</ItemGroup>
</Project>
引用将添加到WebApp.csproj
构建文件。
$ dotnet restore
We restore the packages with dotnet restore
command.
Program.cs
using System.IO;
using Microsoft.AspNetCore.Hosting;
namespace WebApp
{
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
host.Run();
}
}
}
我们设置了 Web 应用主机。 UseContentRoot
方法指定 Web 主机要使用的内容根目录。 内容根是应用使用的任何内容(例如其视图和 Web 内容)的基本路径。
Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace WebApp
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
app.UseDefaultFiles();
app.UseStaticFiles();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc(routes =>
{
routes.MapRoute(
name: "hello",
template: "{controller=Hello}/{action=Index}/");
});
}
}
}
在Startup
中,我们启用 MVC,静态文件并设置路由。
services.AddMvc();
使用AddMvc
,我们将 MVC 中间件添加到应用中。
app.UseDefaultFiles();
app.UseStaticFiles();
我们设置了静态文件。 静态文件将从wwwroot
目录提供。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "hello",
template: "{controller=Hello}/{action=Index}/");
});
使用UseMvc
,我们设置了路由。 路由是将请求 URL 解析为控制器处理器的过程。 控制器名为HelloController
。 操作名称是Index
,这是HelloController
中的方法名称。 该操作的名称也由视图共享,称为Index.cshtml
。 该视图位于Views/Hello
子目录中。 ASP.NET Core 在配置上使用约定,其中可以推断出许多设置,而不必明确声明。
index.html
<!DOCTYPE html>
<html>
<body>
<p>
<a href="Hello?name=Peter&age=23">Get hello message</a>
</p>
</body>
</html>
这是主页。 它包含一个链接,该链接将两个参数发送到 Hello 控制器。 HTML 文件位于wwwroot
目录中。
HelloController.cs
using Microsoft.AspNetCore.Mvc;
using System;
namespace WebApp.Controllers {
public class HelloController : Controller {
public ViewResult Index(string name, int age) {
string msg = String.Format("Hello {0}, you are {1} years old", name, age);
ViewBag.message = msg;
return View();
}
}
}
控制器包含Index
方法,该方法是响应请求而调用的。 它的两个参数自动映射到请求参数(通过配置进行约定)。 该方法生成一个消息字符串,并将其添加到ViewBag
中。 ViewBag
是一个简单的对象,可用于将数据从控制器传输到视图。
当某个操作返回一个视图时,就会发生一个称为视图发现的过程。 视图名称是根据操作的名称推断出来的。
Index.cshtml
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome!</h1>
<div>
@ViewBag.message
</div>
</body>
</html>
Views/Hello
中的Index.cshtml
是Index
操作的视图。 它显示来自ViewBag
的消息。
图:显示消息
在本教程中,我们介绍了 ASP.NET Core 框架。 我们已经创建了两个简单的 ASP.NET Core 应用。
您可能也对以下相关教程感兴趣: C# 教程, C# 中的日期和时间,用 C# Mono 读取网页和 C# Winforms 教程。