ASP

news/2025/1/13 17:49:58/文章来源:https://www.cnblogs.com/hyt810/p/18242954

asp.net core 3.0 学习笔记01

2022.04.29~05.02

本篇为基本入门,介绍一些基本概念和配置,对asp.net core建立一个基本的概念。

1.创建一个Web项目

  • 本质上来说asp.net core web 项目其实就是一个控制台程序
public class Program
{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();//webBuilder.UseKestrel();});
}

2.Startup文件

  • Startup是我们程序的启动配置信息类
  • Startup中会先执行 ConfigureServices() 再执行 Configure()

ConfigureServices方法

  • 这个方法主要是用来配置程序需要注入的服务
  • .net core 大量使用依赖注入的方式来使用我们的服务,原生有三种注入的方法。
    • services.AddTransient() 每次调用都会生成一个新的实例
    • services.AddScoped() 每次web请求中只生成一次实例
    • services.AddSingleton() 服务启动后只创建一次实例(推荐)
  • 依赖注入的优点
    • 代码解耦,调用方和服务没有强依赖(有利于单元测试)
    • 调用方不需要了解具体的服务类,调用方注入的是接口,不管实现
    • 系统会帮我们管理注入服务的生命周期
public void ConfigureServices(IServiceCollection services)
{//包含很多功能一般不用//services.AddMvc();//项目中使用razor视图引擎//services.AddRazorPages();//项目中使用控制器和视图,传统mvc//services.AddControllersWithViews();//项目只使用控制器,webapiservices.AddControllers();//注册自己的服务接口,.net core 提供三种接口依赖注入的方法            //services.AddTransient<IUserSerivce, UserService>();//每次调用都会生成一个新的实例//services.AddScoped<IUserSerivce, UserService>();//每次web请求中只生成一次实例services.AddSingleton<IUserSerivce, UserService>();//服务启动后只创建一次实例(一般使用)//依赖注入 DI//1.controller 解耦,没有强依赖,不依赖服务本身 2.controller 不需要了解具体服务类 3. 不需要管理服务类的生命周期
}

Configure方法

  • 这个方法主要是配置请求管道中的中间件。客户端(浏览器)在请求我们的web程序的时候,需要通过一个管道,这个管道里面配置了一些处理这个web请求的中间件,经过处理后最后返回给客户端。
  • 管道中的中间件是有先后顺序的
  • 需要了解一些常用内置中间件的作用
    • UseHttpsRedirection() 把所有的http请求专为https
    • UseStaticFiles() 启用静态文件访问,默认的静态文件目录为wwwwroot目录,一般我们把图片、js、css这些放在这个目录下。如果不添加这个中间件,将访问不到静态文件。
    • UseRouting() 路由中间件,3.0版本单独分离出来了。
    • UseAuthorization() 认证授权中间件,一般用于登陆。
    • UseEndpoints() 端点中间件,这个一般在最后,在前面的中间件处理完之后,最终要进入到程序的哪里,我们在这里可以配置路由表。
 //把http请求都转成httpsapp.UseHttpsRedirection();//静态文件中间件,不设置客户端访问不到js css这些静态文件//测试访问 https://localhost:44387/images/1.jpgapp.UseStaticFiles();//路由中间件app.UseRouting();//授权认证中间件,这个要放在UseEndpoints之前,因为要先进行验证权限app.UseAuthorization();//端点中间件app.UseEndpoints(endpoints =>{//endpoints.MapRazorPages();//路由表endpoints.MapControllerRoute(name: "default",pattern: "{controller:Home}/{action=Index}/{id?}");//测试//endpoints.MapGet(pattern: "/error", requestDelegate: async context =>//{//    await context.Response.WriteAsync("hello world");//});});    
  • 针对不同的环境可以进行单独的配置,如果开发环境和生产环境使用不同配置代码
    • 方法内的配置
    • 方法级别的配置
    • 类级别的配置(这种不多讨论)
 //方法内的根据不同的环境的不同配置public void Configure(IApplicationBuilder app, IWebHostEnvironment env){//是否为开发模式  启动配置文件launchSettings.json            //if (env.IsProduction())//if (env.IsStaging())//if (env.IsEnvironment("Development")) //自定义环境变量if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Error");                app.UseHsts();}}
 //方法级别的配置//可以单独针对各个环境配置ConfigureServices,根据方法名太判断,Configure+环境变量名+Services(),如果当前环境变量没有对应的ConfigureServices方法则走默认的ConfigureServices()public void ConfigureDevelopmentServices(IServiceCollection services){//开发环境配置//ConfigureServices(services);...具体配置}//可以单独针对各个环境配置Config,根据方法名太判断,Configure+环境变量名(),如果当前环境变量没有对应的Config方法则走默认的Configure()
public void ConfigureDevelopment(IApplicationBuilder app, IWebHostEnvironment env)
{//开发环境配置//Configure(app, env);...具体配置
}

3.添加前端包

libman

  • 我们可使用libman非常方便的添加我们的前端包,而且默认配置的路径就在wwwroot

  • 我们也可以创建npm的配置文件package.json,然后在配置文件中添加需要安装的前端包,不过默认生成目录不在wwwroot下,如果使用vs的话还是推荐使用libman

4.控制器和视图

  • 这部分后面有机会详细介绍

5.配置文件

默认配置文件

  • 默认配置文件为 appsettings.json ,这个系统会自动加载,无须显式声明。
  • 针对不同的环境我们可以创建对应的配置文件。
  • 配置文件默认是在程序启动的时候会加载一次,所以如果发生数修改,除非程序重启不然无法生效。下面会介绍如何自动同步配置文件。

图 3

加载自定义配置文件

  • 我们创建自定义配置文件可以在程序启动的时候加载进去。
  • 自定义的配置文件也可以根据不同环境创建多个,程序运行的时候会根据环境自己加载对应的配置。
    • 开发环境 Development
    • 集成环境 Integration
    • 测试环境 Testing
    • 预发布环境 Staging
    • 生产环境 Production
public class Program
{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, configBuilder) => {//清除默认配置文件//configBuilder.Sources.Clear();//添加新的配置文件configBuilder.AddJsonFile("bussetting.json");configBuilder.AddJsonFile("bussetting.Production.json");}).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();//webBuilder.UseKestrel();});
}

配置文件修改自动同步

  • 添加参数 reloadOnChange 可以对配置源文件变化进行监控,一旦发生变化会触发重新加载配置文件。
configBuilder.AddJsonFile("bussetting.json", optional: true, reloadOnChange: true);
configBuilder.AddJsonFile("bussetting.Production.json", optional: true, reloadOnChange: true);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/723307.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

abp项目

abp项目.net版本升级 系统基于abp框架,.net版本为.net core 2.1,升级之后为.NET 6.0 1.升级项目的目标框架和依赖包项目列表如下升级顺序如下 HPE_ProjectManagement_WebApi.Web (需要修改的东西最多) HPE_ProjectManagement_WebApi.Utility HPE_ProjectManagement_WebApi.C…

代码随想录 算法训练营 d6 哈希表 Leetcode242 有效的字母异位词 Leetcode349 两个数组的交集 Leetcode202 快乐数Leetcode1 两数之和

哈希表 很重要 哈希表 哈希表 场景 一般哈希表都是用来快速判断一个元素是否出现集合里 一般来说 数组模拟 哈希set 哈希map 不同的场景当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。 但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组…

扫描线

扫描线 引入 扫描线一般运用在图形上面,它和它的字面意思十分相似,就是一条线在整个图上扫来扫去,它一般被用来解决图形面积、周长,以及二维数点等问题。 面积问题 例题1:【模板】扫描线 想象有一条线从下往上扫,会将整个图像依次扫描。我们只需要计算出每一条矩形(即图…

笛卡尔树

笛卡尔树 引入 笛卡尔树是一种二叉树,每一个节点由一个键值二元组\((k,w)\)构成。要求k满足二叉搜索树的性质,而w满足堆的性质。 一个有趣的事实是,如果笛卡尔树的\(k,w\)键值确定,且k互不相同,w互不相同,那么这个笛卡尔树的结构是唯一的。上面这棵笛卡尔树相当于把数组元…

虚树

虚树 什么是虚树 虚树常常被用在树形\(dp\)中。当一次询问仅仅涉及到整棵树中少量节点时为每次询问都对整棵树进行\(dp\)在时间上是不可接受的。此时,我们建立一棵仅仅包含部分关键节点的虚树,将非关键节点构成的链简化成边或是剪去,在虚树上进行\(dp\)。 虚树包含所有的询问…

矩阵乘法与矩阵快速幂

1 矩阵乘法 1.定义 若矩阵A的大小为\(n \times m\),矩阵B的大小为\(m \times p\),则两个矩阵可以做乘法,得到的矩阵C的大小为\(n \times p\)。 \[A = \begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{bmatrix} \]\[B = \begin{…

状压dp

状压dp 1.状态压缩 状态压缩就是使用某种方法,以最小的代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要使用状态压缩的对象的点的状态只有两种:0和1。 2.使用条件 1.解法需要保存一定的状态数据(表示一种状态的一个数据值),每个状态通常情…

Redis之哨兵模式

概述无哨兵模式的主从切换的方法是当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费时费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。 Redis从2.8开始正式提供了Sentinel(哨兵)架构来解决这个问题…

ibus-libpinyin无法使用中括号下一页(未解决)

问题 中括号切换上下页用惯了,使用这个不能【】真不习惯。 SunPinyin sunpinyin可以[]切换,但是【】本身变成其他字符了。 不能使用shift将半路的中文换为英文。比如我打拼音,输入完后按shift,我希望他变成英文,并且切换到英文。 搜狗输入法 系统是Ubuntu 22.04 搞了半天用…

m基于FPGA的FIR低通滤波器实现和FPGA频谱分析,包含testbench和滤波器系数MATLAB计算程序

1.算法仿真效果 本系统进行了Vivado2019.2平台的开发,Vivado2019.2仿真结果如下:整体仿真结果如下:放大看,滤波效果如下:对应的频谱如下:FPGA的RTL结构如下:最后用matlab对比仿真,结果如下:可以看到,FPGA的滤波效果和频谱分析与matlab的结果一致。2.算法涉及理论知识…

ch6 信息商品

ch6 信息商品课程目标熟悉信息商品的形成和信息劳动价值理论 掌握信息商品的特征分析及信息商品的价格理论 运用信息商品价格理论分析和理解相关案例多看两眼 ppt 吧,这一部分考的很多 知识回顾 信息商品的概念信息成为商品的基本条件 不宜成为信息商品的信息产品类型 信息商品…

原始套接字

解析MAC数据包原始套接字-解析MAC数据包 原始套接字.c 套接字类型 原始套接字 1、一种不同于SOCK_STREAM、SOCK_DGRAM的套接字,它实现于系统核心 2、可以接收本机网卡上所有的数据帧(数据包),对于监听网络流量和分析网络数据很有作用 3、开发人员可发送自己组装的数据包到网…