ASP.NETCore学习记录(一)

ASP.NETCore学习记录(一)

asp.net core介绍  Startup.cs  ConfigureServices  Configure

0. ASP.NETCore 介绍

ASP.NETCore是一个新的开源和跨平台的框架,用于构建如Web应用、物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序。ASP.NET Core应用可运行于.NET Core和完整的.NET Framework之上。构建它的目的是为那些部署在云端或者内部运行的应用提 供一个优化的开发框架。它由最小开销的模块化的组件构成,因此在构建解决方案的同时可以 保持灵活性。我们可以在Windows、Mac和Linux上跨平台开发和运行自己的ASP.NET Core 应用。

ASP.NETCore 开源在 GitHub 上。ASP.NET Core有一些架构上的改变,这些改变使得它成为一个更为精简并且模块化的框架。ASP.NET Core不再基于System.Web.dll。当前它基于一系列颗粒化的,并且有良好构建的 NuGet包。这一特点能够让你通过仅仅包含需要的NuGet包的方法来优化你的应用。一个更小 的应用程序接口通过“只为你需要的功能付出”(pay-for-what-you-use)模型获得的好处包括: 可靠的安全性、简化服务、改进性能和减少成本。

通过ASP.NET Core可以获得的改进如下:

  • 一个统一的方式用于构建Web UI和Web APIs。
  • 集成现代的客户端开发框架和开发流程。
  • 一个适用于云的,基于环境的配置系统。
  • 内置的依赖注入。
  • 新型的、轻量级的、模块化HTTP请求管道。
  • 运行于IIS或者自宿主(self_host)于你自己的进程的能力。
  • 基于支持真正的side-by-side应用程序版本化的.NET Core构建。
  • 完全以NuGet包的形式发布。
  • 新的用于简化现代Web开发的工具。
  • 可以在Windows、Mac和Linux上构建和运行跨平台的ASP.NET应用。
  • 开源并且重视社区。

1. ASP.NETCore 应用

使用VS 2017新建一个Web应用,打开VS 2017创建一个新的解决方案,在解决方案中新建一个项目,在添加新项目窗口中选择 .NET Core,选择ASP.NETCore Web应用程序,如下图所示:

新建 ASP.NET Core Application

这里的实例我们使用 Web Application (MVC) 框架版本为 .NET Core 2.1 如下图所示:

选择ASP.NET Core 项目模板

一个ASP.NET Core 应用其实就是在 Program 类的 Main方法调用 WebHost.CreateDefaultBuilder方法,创建了一个默认的Web应用程序宿主(Web服务器)。相比于.NET Core 1.0 在.NET Core 2.x 少了许多配置,新的方式已经隐藏了很多细节, 在WebHost.CreateDefaultBuilder这个函数内部帮助我们完成了大部分的配置工作(启用了Web服务器 UseKestrel、配置内容根目录 UseContentRoot等)。

在下面的代码中,Main方法创建了一个默认的Web服务器,并指定Startup类(UseStartup)的方法。下面会讲解更多关于 Startup 的内容。Build 和 Run 方法构建了用于宿主应用程序的 IWebHost,然后启动它来监听传入的HTTP请求。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace WebApplicationDome
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
}

2. 服务器

ASP.NET Core 托管模式并不直接监听请求,而是依赖于一个 HTTP Server 实现来转发请求到应用程序。这个被转发的请求会以一组 feature 接口的形式被包装,然后被应用程序组合到一个 HttpContext 中去。ASP.NET Core 包含了一个托管的跨平台Web服务器:Kestrel,它往往会 被运行在一个如 IIS 或者 Nginx 的生产 Web 服务器之后。


3. Startup.cs

WebHostBuilderExtensions 的 UseStartup 方法为你的应用指定了 Startup 类。
Startup类是应用程序的入口(entrypoint),这个类可以用来定义请求处理管道和配置应用需耍的服务。

Startup 类必须是公开的 (public)。
Startup类能够选择性地在构造函数中接受通过依赖注入提供的依赖项。
Startup类必须定义 Configure方法,可选择定义一个 ConfigureServices方法,这些方法将在应用程序启动时被调用:

public class Startup
{
    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    }
}

在ASP.NETCore中,Startup类提供了应用程序的入口,而且在所有应用程序都有Startup类。可能会存在特定环境的启动类和方法,但无论如何,Startup 类都将被充当为应用程序的启动点。

1). ConfigureServices方法

ConfigureServices 方法用于定义应用程序所使用的服务。通过依赖注入可将服务加入服务容器(IoC容器),使其在应用程序中可用。正如 Startup 类能将指定的依赖项作为其方法参数——而不足硬编码(hard-coding)来实例化特定实现,在应用程序中的其他类都可以做到这一点。通过在 IServiceCollection 上使用扩展方法来包装需要大量配置细节的 ConfigureServices。在下面的例子(使用了默认的Web应用程序MVC模板)中看到 ConfigureServices 方法中有个 AddMvc 的扩展方法被用于设罝应用程序能够使用MVC服务:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

2). Configure方法

Configure方法用于指定ASP.NET应用程序将如何响应每一个HTTP请求。简单来说,你可以配置每个请求都接收相同的响应。然而,大多数实际的应用程序都需要比这更多的功能。更复杂的管道配置可以封装于中间件(middleware)中,并通过扩展方法添加到 lApplicationBuilder 上。Configure 方法必须接受一个 IApplicationBuilder 参数。一些额外服务,比如 IHostingEnvironment 或 ILoggerFactory 也可以被指定,并且在它们可用的情况下,这些服务将会被服务器注入进来。在下面的例子(来源于默认的Web应用程序MVC站点模板),多个扩展方法被用于配罝管道,以支持错误页、静态文件、ASP.NET MVC路由。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection(); // 添加HTTPS重定向中间件
    app.UseStaticFiles();    // 添加静态文件中间件
    app.UseCookiePolicy();   // 使用Cookie策略中间件

    app.UseMvc(routes =>    // 使用MVC中间件
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

每个 Use 扩展方法都会把一个中间件加入请求管道中。例如,UseMvc扩展方法增加路由中间件请求管道,并配置MVC为默认处理程序。

在下一节中间件,将会介绍更多有关中间件的信息,包括使用 IApplicationBuilder 来定义请求管道,创建自己的自定义中间件。

3). 在启动时服务可用

ASP.NETCore在应用程序启动期间提供了一些应用服务和对象。使用这些服务的方法非常简单,只要在 Startup 类的构造函数中包含合适的接口,或是在它的 Configure方法、ConfigureServices方法中包含合适的接口即可。下面定义了在Startup类中对每个方法可用的服务。框架服务和对象包括如下内容:

①. IApplicationBuilder
被用于构建应用程序的请求管道。只能在 Startup 中的 Configure方法里使用。

②. IApplicationEnvironment
提供了访问应用程序属性,类似于ApplicationNamc、ApplicationVersion以及 ApplicationBasePath。可以在Startup的构造函数和Configure方法中使用。

③. IHostingEnvironment
提供了当前的EnvironmentName、WebRootPath以及Web根文件提供者。可以在Startup的构造函数和Configure方法中使用。

④. LoggerFactory
提供了创建日志的机制。可以在 Startup的构造函数或 Configure 方法中使用,更多请阅读 Logging。

⑤. IServiceCollection
当前容器中各服务的配置集合。只能在 ConfigureServices 方法中使用。只有在 ConfigureServices方法中配罝后,此服务在应用程序中才变得可用。

看看Startup类中按它们被调用排序的每一个方法,下面的服务可作为参数:

  • Startup构造函数: IApplicationEnvironment, IHostingEnvironment, ILoggerFactory
  • ConfigureServiccs方法: IServiccCollcction
  • Configure方法: IApplicationBuilder, IApplicationEnvironment, IHostingEnvironment, ILoggerFactory

4. 服务

服务是应用程序中用于通用调用的组件。服务通过依赖注入获取并使用。ASP.NET Core内置了一个简单的控制反转(IoC)容器,它默认支持构造器注入,并且可以方便地替换成你自己选用的 IoC 容器。由于它的松耦合特性,依赖注入(DI)使服务在整个应用中都可以使用。例如,Logging 在整个应用中都可用。


5. 内容根目录

内容根目录是应用程序所用到的所有内容的根路径,比如它的 views 和 web内容。默认情况下,内容根目录是与宿主应用的可执行程序的应用根目录相同:其他位罝可以通过 WebHostBuilder 来设置。


6. Web根目录

应用程序的 Web根目录是项目中类似于 CSS、JS和图片文件公开、静态的资源的目录。静态文件中间件将默认只读取Web根目录和其子目录中的文件。Web根目录默认为[content root]/wwwroot。(可以通过WebHostBuilder来指定另外一个地址)


7. 配置

ASP.NET Core使用了一个新的配置模型,用来处理简单的键值对。新的配置模型不是基于 System.Configuration 或者 web.config;相反,它足一个有序拉取数据的配置 providers。内置的构造提供支持多种不同的文件格式,如 XML、JSON、INI和用于支持基于环境的配置环境变量,也可以自己编写实现自定义的配罝providers。


8. 环境

ASP.NET Core 支持在多个环境中管理应用程序行为,如开发Development,预演staging和生产Production,是ASP.NET Core中的第一级概念,而且它可以使用环境变量来配置。

将在后面记录中详细介绍以上知识点。


参考资料

《ASP.NET Core 跨平台开发从入门到实践》

原文地址:https://www.cnblogs.com/anayigeren/p/10231223.html

时间: 2024-10-12 17:00:41

ASP.NETCore学习记录(一)的相关文章

ASP.NETCore学习记录(二) —— ASP.NET Core 中间件

ASP.NET Core 中间件 目录: IApplicationBuilder 什么是中间件 ? 使用 IApplicationBuilder 创建中间件 Run.Map 与 Use 方法 实战中间件 参考原文 我们知道在 ASP.NET 中,有一个面向切面的请求管道,由22个主要的事件构成,能够让我们在往预定的执行顺序里面添加自己的处理逻辑.一般采取两种方式:一种是直接在 Global.asax 中对应的方法中直接添加代码.一种是是在 web.config 中通过注册 HttpModule

Asp.NetCore依赖注入和管道方式的异常处理及日志记录

原文:Asp.NetCore依赖注入和管道方式的异常处理及日志记录 前言 ????在业务系统,异常处理是所有开发人员必须面对的问题,在一定程度上,异常处理的能力反映出开发者对业务的驾驭水平:本章将着重介绍如何在 WebApi 程序中对异常进行捕获,然后利用 Nlog 组件进行记录:同时,还将介绍两种不同的 异常捕获方式:管道捕获/服务过滤:通过本练习,将学习到如何捕获异常.处理异常跳转.记录异常信息. 1. 搭建框架 ????首先,创建一个 WebApi 项目,选择 Asp.Net Core W

Asp.Net MVC学习记录之“一个实体对象不能由多个 IEntityChangeTracker 实例引用”

原文:浅谈 js 正则之 test 方法 其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西.先来看个东西吧. ? 1 2 3 4 5 var re = /\d/; console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1"

ASP.net中的AJAX学习记录六 无刷新的数据编辑(GridView和DetailsView结合实例)(转)

本篇博客是仿照书中实例,实现GridView和DetailsView结合无刷新的数据编辑效果,页面效果:当点击GridView1的行或换页时,都会引发DetailsView1的数据绑定显示至页面,同时当使用DetailsView1编辑.删除.添加时,也会引起GridView1的重新绑定,整体页面实现无刷新. 页面布局: 1.新建AJAX窗口,命名为:"NoRefreshEdit.aspx".要想实现页面无刷新编辑,就必须使用两个Updatepanel. 2.在NoRefreshEdit

从桌面到 Web - 二十几天学 ASP.NETCore 1

这么多年一直从事桌面开发,一直没有时间好好学学  web 开发.感觉自己就像从石器时代走来的古代类人猿.由于工作的调整,现在终于有时间学习一下 Web 开发.出于对技术和框架的熟悉和继承,决定还是学习微软的 Web 开发框架(虽然我一直认为java 是一种比C# 更优秀的语言,社区的活力远高于 C#,想想 eclipse 还是算了吧). 微软的 Web 开发框架从 ASP,ASP.NET,ASP.NET MVC 一直到现在的 ASP.NET Core一路走来,坏消息是没有一个熟悉的,好消息是 A

jQuery Moblile Demos学习记录Theming、Button、Icons图标,脑子真的不好使。

jQuery Moblile Demos学习记录Theming.Button.Icons图标,脑子真的不好使. 06. 二 / Jquery Mobile 前端 / 没有评论 本文来源于www.ifyao.com禁止转载!www.ifyao.com 一CSS Framework块 Theming 是一个整体了解默认主题和内置的A-E主题各个效果.待解决问题,自定义主题,下边是一个知识点. http://www.w3cschool.cc/jquerymobile/jquerymobile-them

银联网关跳转支付 学习记录1

最近在做一个项目,里面涉及到了支付功能,使用的是银联的在线支付功能(网关跳转支付).银联给的例子很坑爹,简单的代码只是了一大堆,关键的部分一点儿注释都没有,很多工具类还没有源码.所以学习起来比较吃力.而网上这方面的资料有相对比较少,仅有的一些资料也比较陈旧.所以我打算记录一下我的学习记录,说不定会对别人也有一些帮助. 下载银联Demo 我使用的是银联的网关跳转支付功能,需要完成在线支付,支付完跳转,并接受银联的通知更新自己数据库的功能. 银联技术服务的首页地址是https://open.unio

Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践

原文:Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践 环境 本地 win7 服务器:Virtual Box 上的Centos ssh工具: Xshell 文件传输: xftp 1.在本地创建asp.net core应用发布 1.1 使用Vs2017 新建一个asp.netcore项目 步骤略(一路next),当然你也可以用命令行创建. 1.2 发布项目 在项目路径下执行命令 dotnet publish –c release 先本地运行是否有问题,减少因为本

Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)

原文:Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二) Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一) 接上一篇 3. Nginx配置反向代理 3.1 cnetos 安装nginx 首先,我们需要在服务器上安装Nginx.参考网址 3.1.1:添加Nginx存储库 要添加CentOS 7 EPEL仓库,请打开终端并使用以下命令: sudo yum install epel-release EPEL的全称叫 Ex