ASP.NETCore教程是ASP.NETCore框架的入门教程,用于在C#中构建跨平台Web应用程序。本教程使用ASP.NETCore框架版本1.1.0。
ASP.NET核心
ASP.NETCore是一个跨平台的高性能开源框架,用于构建现代的、基于云的、联网的应用程序。ASP.NETCore是传统ASP.NET框架的设计。您可以在使用ASPCorebook开发ERP软件中找到有关ASP.NETCore的更多信息。
ASP.NETCore应用程序可以在Windows、Linux和Mac上运行。
ASP.NET核心特性
以下是ASP.NETCore的主要特性:
- 使用NuGet包进行模块化设计
- 跨平台开发
- 开源和基于社区
- 云就绪架构
- 内置依赖注入
- 与流行的前端技术集成
安装.NETCoreCLI工具
第一步是为您的操作系统安装.NETCore命令行工具。安装说明可在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命令行工具。
.NETCore控制台应用程序
我们通过在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命令,我们创建一个新的控制台应用程序项目。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
</Project>
这是项目配置文件。
using System;
namespace consapp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Console application");
}
}
}
这是一个简单的C#程序。
$ dotnet restore
使用dotnetrestore命令,我们下载必要的依赖项。它调用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
我们使用dotnetbuild命令构建程序。
$ dotnet run Console application
最后,我们用dotnetrun运行程序。
视觉工作室代码
VisualStudioCode是Microsoft为Windows、Linux和MacOS开发的源代码编辑器。它包括对调试、嵌入式Git控制、语法突出显示、智能代码完成、片段和代码重构的支持。它可用于开发ASP.NETCore应用程序。可以从其网页下载VisualStudioCode。
如果我们选择VisualStudioCode,我们还需要安装OmniSharpC#扩展。
ASP.NET核心应用程序
在下面的应用程序中,我们创建了一个简单的ASP.NETCore应用程序。
$ dotnet new web -o SimpleApp Content generation time: 221.9237 ms The template "ASP.NET Core Empty" created successfully.
使用dotnetnewweb命令创建了一个新的Web应用程序。
$ cd SimpleApp $ dotnet restore
我们使用dotnetrestore命令恢复包。
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.NETCore应用程序是一个控制台应用程序,它在其Main方法中创建一个Web服务器。我们创建一个Web应用程序主机。它使用KestrelWeb服务器。Build和Run方法构建IWebHost对象,该对象将托管应用程序并开始侦听传入的HTTP请求。主机是Web服务器的包装器。
WebHostBuilder上的UseStartup方法为您的应用指定Startup类。Startup类必须是公共的,并且必须有两个方法:ConfigureServices和Configure。ConfigureServices定义MVC框架或EntityFrameworkCore等服务。Configure定义请求管道中的中间件。中间件是处理请求和响应的应用程序组件。
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.
我们使用dotnetrun命令运行应用程序。应用程序已启动并将侦听端口5000。
$ curl localhost:5000 Hello there
我们使用curl工具创建请求,应用程序以文本消息响应。
ASP.NETCoreMVC应用程序
在下一个应用程序中,我们设置了一个使用MVC模式的ASP.NETCore应用程序。
模型-视图-控制器(MVC)架构模式将应用程序分为三个区域:模型、视图和控制器。该模式有助于建立关注点分离。
$ dotnet new web -o WebApp $ cd WebApp
我们创建一个ASP.NETCore应用程序。
$ 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包添加到项目中。这个包增加了处理静态文件的能力。
<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
我们使用dotnetrestore命令恢复包。
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内容。
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.NETCore使用约定优于配置,其中许多设置都是推断出来的,不必明确说明。
<!DOCTYPE html>
<html>
<body>
<p>
<a href="Hello?name=Peter&age=23">Get hello message</a>
</p>
</body>
</html>
这是主页。它包含一个将两个参数发送到Hello控制器的链接。HTML文件位于wwwroot目录中。
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是一个简单的对象,可用于将数据从控制器传输到视图。
当一个动作返回一个视图时,一个称为视图发现的过程就会发生。视图名称是从操作名称推断出来的。
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome!</h1>
<div>
@ViewBag.message
</div>
</body>
</html>
Index.cshtml位于Views/Hello中,是Index操作的视图。它显示来自ViewBag的消息。
在本教程中,我们介绍了ASP.NETCore框架。我们创建了两个简单的ASP.NETCore应用程序。
您可能还对以下相关教程感兴趣:C#教程、C#中的日期和时间、使用C#阅读网页和MonoC#Winforms教程。
