开放的编程资料库

当前位置:我爱分享网 > C#教程 > 正文

ASP.NET核心

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服务器。BuildRun方法构建IWebHost对象,该对象将托管应用程序并开始侦听传入的HTTP请求。主机是Web服务器的包装器。

WebHostBuilder上的UseStartup方法为您的应用指定Startup类。Startup类必须是公共的,并且必须有两个方法:ConfigureServicesConfigureConfigureServices定义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方法,调用该方法以响应请求。它的两个参数自动映射到请求参数(约定优于配置)。该方法构建一个消息字符串并将其添加到ViewBagViewBag是一个简单的对象,可用于将数据从控制器传输到视图。

当一个动作返回一个视图时,一个称为视图发现的过程就会发生。视图名称是从操作名称推断出来的。

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

未经允许不得转载:我爱分享网 » ASP.NET核心

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏