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教程。