当前位置: 首页 > 编程日记 > 正文

ASP.NETCore学习记录(一)

ASP.NETCore学习记录(一)

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
新建 ASP.NET Core Application

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

选择ASP.NET Core 项目模板
选择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 的内容。BuildRun 方法构建了用于宿主应用程序的 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 参数。一些额外服务,比如 IHostingEnvironmentILoggerFactory 也可以被指定,并且在它们可用的情况下,这些服务将会被服务器注入进来。在下面的例子(来源于默认的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

相关文章:

ptam程序流程

程序运行基本流程&#xff1a;Step1: System::System(){ 1、注册一系列命令、添加相对应的功能按钮。 2、创建摄像机mpCamera new ATANCamera("Camera"); 实现的功能包括&#xff1a;加载camera.cfg配置文件中的摄像机内参&#xff08;mvFocal[0]、mvFocal[1]、mvCe…

js / jquery 零散收集

2019独角兽企业重金招聘Python工程师标准>>> <select id"typeSelector" οnchange"choiceoption(this.options[this.options.selectedIndex])"> <option id"xx" value"a">A</option> </select> &…

【ACM】杭电OJ 2057

思路&#xff1a; 本题注意十六进制的输入输出格式。 注意&#xff1a; 1.别忘了需要用__int64&#xff0c;因为数据比较大&#xff1b; 2.两数相加为负数的时候&#xff0c;想着分开考虑。 #include <iostream> #include <cstdio> #include <cstring> #…

OpenCV学习系列教程第五篇:测试和提高代码的效率

Opencv-Python学习系列教程第五篇 来自opencv-python官方学习文档&#xff0c;本人谨做翻译和注释&#xff0c;以及一些自己的理解 本文由作者翻译并进行代码验证&#xff0c;转载请注明出处~ 官方文档请参阅&#xff1a;https://docs.opencv.org/4.0.1/dc/d71/tutorial_py_opt…

ORB-SLAM论文翻译

ORB-SLAM: a Versatile and Accurate Monocular SLAM System 原文发表于&#xff1a;IEEE Transactions on Robotics (Impact Factor: 2.43). 10/2015 摘要&#xff1a; 本文主要讲了ORB-SLAM&#xff0c;一个基于特征识别的单目slam系统&#xff0c;可以实时运行&#xff0…

UVa11300 - Spreading the Wealth

题意 n个人围成一圈&#xff0c;每个人都有一定数量的金币&#xff0c;金币总数可被n整除&#xff0c;现可将手中金币给左右相邻的人&#xff0c;最终使每人手中的金币数相等&#xff0c;求最少转移的金币数量。 思路 设a[i]给了a[i-1]x1个金币&#xff0c;从a[i1]拿到x2个金币…

【ACM】杭电OJ 1862

用了三个快速排序的子函数进行排序&#xff0c;排序结束后&#xff0c;再从头循环&#xff0c;判断成绩或者姓名是否相同。 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <alg…

Custom Client Side Drag and Drop Behavior in ASP.NET AJAX

这是我的一篇在http://aspalliance.com/上的英文文章&#xff0c;限于版权协议中的排他性条款&#xff0c;这里只能给出一部分摘要引用。有兴趣的朋友可以到这里看到完整的全文&#xff1a;《Custom Client Side Drag and Drop Behavior in ASP.NET AJAX》。 Published: 19 Jun…

SLAM的开源以及在移动端AR的适用分析

当前的开源方案 当下部分总结引用自blog:http://blog.csdn.net/OnafioO/article/details/73175835文章总结很好没本文关于其在移动端方面加以总结&#xff0c;希望大家参与讨论&#xff0c;不足之处&#xff0c;请指正。 本讲的前半部分将带领读者参观一下当前的视觉SLAM方案…

用 cooking 搭建一个简单又优雅的 Vue 项目开发环境 (入门篇)

本文适合 Vue 的初学者&#xff0c;以及对 webpack 不熟悉的同学阅读。前提是你要会用基本的命令行、 Node 和 NPM&#xff0c;以及掌握 ES2015 的基础知识。本文都是在 macOS 环境下运行&#xff0c;要求使用 npm > 3, node > 4 的环境。我们会以 Vue 2.0 搭配 Webpack …

【算法导论】【ACM】归并排序总结

许多有用的算法在结构上是递归的&#xff1a;为了解决一个给定的问题&#xff0c;算法一次或多次递归地调用其自身以解决紧密相关地若干子问题。这些算法典型的遵循分治法地思想&#xff1a;将原问题分解成几个规模较小但类似于原问题的子问题&#xff0c;递归地求解这些子问题…

C++ 纯虚方法

1、纯虚方法解决什么样的问题&#xff0c;为什么要设计出纯虚方法&#xff1f; 考虑下面的需求&#xff0c;基类声明了一个方法&#xff0c;这个方法只针对具体的子类才有意义&#xff0c;比如Animal的Eat()方法&#xff0c;调用Animal的Eat方法是没有意义的。比如Dog吃肉&…

C++标准库中各种排序归纳

一、简介所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。我们在编程过程中会经常接触到排序&#xff0c;比如游戏中的排行榜等。C标准库中提供了各种不同的排序算法&#xff0c;这篇博客将逐一介绍。…

【数据结构】最小生成树 Prim算法 Kruskal算法

最小生成树应用场景&#xff1a; 假设以下场景&#xff0c;有一块木板&#xff0c;板上钉上一些钉子&#xff0c;这些钉子可以由一些细绳连接起来。假设每个钉子可以通过一根或者多根细绳连接起来&#xff0c;那么一定存在这样得情况&#xff0c;即用最少的细绳把所有的钉子连…

.net内存回收与Dispose﹐Close﹐Finalize方法

.net内存回收与Dispose﹐Close﹐Finalize方法 一. net的对象使用一般分为三种情况﹕ 1.创建对象2.使用对象3.释放对象 二.创建对象1.创建对象实际分为两个步骤﹕变量类型宣告和初始化对象 2.变量类型宣告(declare),如﹕ FileStream fs这行代码会在当前的变量作用域空间(栈或堆)…

SLAM学习--------相机位姿表示-李群李代数

slam 求解相机的位姿求解核心思想&#xff1a;将有约束的李群问题转换成无约束的李代数问题&#xff0c;然后使用高斯牛顿算法或者LM(列文伯格-马夸尔特法)求解。 人们找了很多以相机位姿为变量的误差函数&#xff0c;比如光度误差&#xff0c;重投影误差&#xff0c;3D几何误…

【ACM】杭电OJ 2063

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2063 借鉴&#xff1a;http://blog.sina.com.cn/s/blog_ac5ed4f30101ewjk.html 二分图&#xff08;二部图&#xff09;&#xff1a;图论中的一种特殊模型。设G(V,E)是一个无向图&#xff0c;如果顶点V可以分割…

AngularJs表单自动验证

angular-auto-validate 地址&#xff1a;https://github.com/jonsamwell/angular-auto-validate 引用&#xff1a; <script src"/Assets/JS/AngularJS/angular-auto-validate/dist/jcs-auto-validate.js" charset"utf-8"></script> 依赖&#…

AlwaysVisibleControlExtender

今天早上学习了AlwaysVisibleControlExtender控件&#xff0c;感觉还是不错。下午就写点东西&#xff0c;总结一下使用方法。 简单使用示例(显示当前时间) 1&#xff09;在VS下&#xff0c;新建一个ASP.NET AJAX-Enabled Web Project项目&#xff0c;命名为AlwaysVisibleC…

Depth graph

深度相机 定义&#xff1a;可以直接获取场景中物体距离摄像头物理距离的相机。在计算机视觉系统中&#xff0c;三维场景信息为图像分割、目标检测、物体跟踪等各类计算机视觉应用提供了更多的可能性&#xff0c;而深度图像&#xff08;Depth map&#xff09;作为一种普遍的三维…

【ACM】POJ 1852

【问题描述】 一队蚂蚁在一根水平杆上行走&#xff0c;每只蚂蚁固定速度 1cm/s. 当一只蚂蚁走到杆的尽头时&#xff0c;立即从秆上掉落. 当两只蚂蚁相遇时它们会掉头向相反的方向前进. 我们知道每只蚂蚁在杆上的初始位置, 但是, 我们不知道蚂蚁向哪个方向前行. 你的任务是计算…

ZStack--通过Ansible实现全自动化

2019独角兽企业重金招聘Python工程师标准>>> Agent是一种常见的IaaS软件管理设备的方式&#xff1b;例如&#xff0c;ZStack使用Python agents去管理KVM主机。因为海量的设备&#xff0c;安装和升级agents成为巨大的挑战&#xff0c;所以大多数IaaS软件把这个问题留…

SVO 半直接视觉里程计

SVO 从名字来看&#xff0c;是半直接视觉里程计&#xff0c;所谓半直接是指通过对图像中的特征点图像块进行直接匹配来获取相机位姿&#xff0c;而不像直接匹配法那样对整个图像使用直接匹配。整幅图像的直接匹配法常见于RGBD传感器&#xff0c;因为RGBD传感器能获取整幅图像的…

css构造文本

1. 1. 文本缩进text-indent&#xff1a;值&#xff1b;值为数字&#xff0c;最常用的数值单位是px(像素)&#xff0c;也可以直接是百分比&#xff01;text-indent:100px;text-indent:10%;2. 文本对齐text-align:对其方式;可以的值为&#xff1a;left、center、right3. 文本行高…

【数据结构】单链表的逆序输出(两种方法)

第一种方法&#xff1a;转换指针方向 即&#xff1a;将一个已经创建好的单链表进行指针域的改变 今天突然被问到单链表逆序的问题&#xff0c;弄了好久才看出别人的程序有啥问题&#xff0c;就重新写了一遍。 今天才在CSDN客户端上看到美团的面试题是冒泡排序。 一个看似简单…

koa+mongoose基础入门

1.mongoose基本使用 1.安装mongodb npm install mongodb 2.引入mongodb数据表&#xff0c;连接mongodb&#xff0c;通过node来对mongodb进行异步的增删改查 const mongodb requrie(mongodb); mongodb.MongoClient.connect("mongodb://localhost/db1", function(err,…

视觉SLAM学习(三)--------SLAM 综述

SLAM概述 参考资料分享来自本人博客&#xff1a;https://blog.csdn.net/Darlingqiang/article/details/78840931 SLAM一般处理流程包括track和map两部分。所谓的track是用来估计相机的位姿&#xff0c;也叫front-end。而map部分(back-end)则是深度的构建&#xff0c;通过前面…

【数据结构】所有顶点对的最短路径 Floyd算法

所有顶点对的最短路径问题是指&#xff1a;对于给定的有向图G(V&#xff0c;E),求任意一对顶点之间的最短路径。 可以求解得到的 的递推公式&#xff1a; #include <stdio.h> #include <stdlib.h> const int FINITY 5000; const int M 20; typedef struct {ch…

backbone学习总结(二)

今天来看下backbone的路由控制的功能。其实个人感觉backbone&#xff0c;模块就那么几个&#xff0c;熟悉它的框架结构&#xff0c;以及组成&#xff0c;就差不多。 废话不多说&#xff0c;我们来看看还剩下的功能。 关于路由和历史管理 通过 Backbone.Router.extend 来创建路由…

人工智能--野人过河

课程简介 人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能的定义可以分为两部分&#xff0c;即“人工”和“智能”。“人工”比较好…