Asp.net core 框架入门

概述

appsettings.json:配置文件,数据库连接字符串配置信息

Program.cs:程序入口文件(里面有个Main方法)

Startup.cs:启动配置文件

依赖项:管理项目所依赖的第三方组件的安装,配置,升级

Controller:控制器

Models:实体

Views:视图

namespace Sample01.Models
{
 /// <summary>
 /// 2018.11.19
 /// 祝雷
 /// 内容实体
 /// </summary>
 public class Content
 {
  /// <summary>
  /// 主键
  /// </summary>
  public int Id { get; set; }
  /// <summary>
  /// 标题
  /// </summary>
  public string title { get; set; }
  /// <summary>
  /// 内容
  /// </summary>
  public string content { get; set; }
  /// <summary>
  /// 状态 1正常 0删除
  /// </summary>
  public int status { get; set; }
  /// <summary>
  /// 创建时间
  /// </summary>
  public DateTime add_time { get; set; }
  /// <summary>
  /// 修改时间
  /// </summary>
  public DateTime modify_time { get; set; }
 }
}
namespace Sample01.Controllers
{
 /// <summary>
 /// Content控制器
 /// </summary>
 public class ContentController : Controller
 {
  /// <summary>
  /// 首页显示
  /// </summary>
  /// <returns></returns>
  public IActionResult Index()
  {
    var contents = new List<Content>();
    for (int i = 1; i < 11; i++)
    {
         contents.Add(new Content { Id=i,title=$"{i}的标题",content= $"{i}的内容",status=1, add_time=DateTime.Now.AddDays(-i)}); 
    }
    return View(new ContentViewModel { Contents=contents});
   } 
 } 
}

依赖项注入DI

构造函数传参,松耦合,可测试,可替换,可维护

more:体系结构原则 - .NET | Microsoft Learn

https://www.cnblogs.com/youring2/p/10926590.html

概念我知道,但不知道怎么使用,是不是得去看看.net core的教程

生命周期

1.瞬态:

2.单例:

3.作用域:

builder.Services.AddTransient<IUserService,UserService>();

builder.Services.AddSingleton<IUserService,UserService>();

builder.Services.AddScoped<IUserService,UserService>();

???

注入方式

1.构造函数注入:

2.属性注入:

3.方法注入:

中间件

var builder= WebApplication.CreateBuilder(args);
var app= builder.Build();

app.Use(async (context, next) =>
{
    await next.Invoke();//Invoke? 走下一个中间件
});

app.Run(async context =>
{
    await context.Response.WriteAsync("你好你被中间件截胡了");//短路
});
app.Run();

1.静态文件中间件

app.UseStaticFiles();启用静态文件中间件

using Microsoft.Extensions.FileProviders;

var builder= WebApplication.CreateBuilder(args);
var app= builder.Build();

//app.Use(async (context, next) =>
//{
//    await next.Invoke();
//});

//app.Run(async context =>
//{
//    await context.Response.WriteAsync("你好你被中间件截胡了");
//});
app.UseStaticFiles(new StaticFileOptions()
{
    FileProvider = new PhysicalFileProvider(
        Path.Combine(builder.Environment.ContentRootPath, "MyStaticFile")
        ),
    RequestPath= "/StaticFiles"
});
app.Run();

创建该文件夹

2.改变静态文件访问地址(改变文件夹)

app.UseStaticFiles(new StaticFileOptions()
{
    FileProvider = new PhysicalFileProvider(
        Path.Combine(builder.Environment.ContentRootPath, "MyStaticFile")
        ),
    RequestPath= "/StaticFiles"//https://localhost:7064/StaticFiles/1.png
});

因为缓存的原因原来的还能被打开

3.启用目录浏览

展示该站点下有哪些静态文件,服务可以访问

using Microsoft.Extensions.FileProviders;

var builder= WebApplication.CreateBuilder(args);
var app= builder.Build();

var fileProvider = new PhysicalFileProvider(Path.Combine(builder.Environment.ContentRootPath, "MyStaticFile"));//1.文件路径
var requestPath = "/MyImages";//2.请求路径

//app.Use(async (context, next) =>
//{
//    await next.Invoke();
//});

//app.Run(async context =>
//{
//    await context.Response.WriteAsync("你好你被中间件截胡了");
//});
app.UseStaticFiles(new StaticFileOptions()
{
    FileProvider = new PhysicalFileProvider(
        Path.Combine(builder.Environment.ContentRootPath, "MyStaticFile")
        ),
    RequestPath= requestPath ,//3
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions
{
    FileProvider = fileProvider,
    RequestPath = requestPath
}); //4.开启目录浏览
app.Run();

4.https重定向

app.UseHsts();
app.UseHttpsRedirection();//实现重定向 -当打开的是不安全的站点时自动跳转

5.读取配置

builder.Services.AddDirectoryBrowser();

app.MapGet("config1", (IConfiguration configuration) =>
{
    return configuration["msg"] + "_" + configuration["Logging:LogLevel:Default"];
});
app.MapGet("config2", (IConfiguration configuration) =>
{
    return configuration.GetValue<string>("msg");
});
app.MapGet("config3", (IConfiguration configuration) =>
{
    return configuration.GetSection("msg").Value;
});

IConfiguration //configuration构造

通过路由终结点来演示读取这个配置

builder.Services.AddDirectoryBrowser();
app.MapGet("config", (IConfiguration configuration) =>
{
    return configuration["msg"] + "_" + configuration["Logging:LogLevel:Default"];
});

通过GetValue方法获取

通过GetSection方法获取

5.2读取对象配置

using WebApplication5.Model;

app.MapGet("config4", (IConfiguration configuration) =>
{
    return configuration.GetSection("Person").Get<Person>();
});

6.环境

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字图像处理(实践篇)二十六 使用cvlib进行人脸检测、性别检测和目标检测

目录 1 安装cvlib 2 涉及的函数 3 实践 4 其他 cvlib一个简单,高级,易于使用的开源Python计算机视觉库。 1 安装cvlib # 安装依赖pip install opencv-python tensorflow# 安装cvlibpip install cvlib</

你不知道的git如何撤销回退版本

简言之&#xff1a;从1 回退到 3&#xff0c;在3版本通过回退记录(git reflog)找到它的上一条回退记录的hash值&#xff0c;复制1的hash值进行回退&#xff0c;执行git reset --hard 粘贴1的hash值进来&#xff0c;此时就回到1的版本了&#xff0c;执行git log即可看到1、2、3、…

HCIA——25FTP 的工作原理、功能、TFTP、控制连接、数据连接的选择、解答

学习目标&#xff1a; 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议&#xff0c;了解典型网络设备的组成和特点&#xff0c;理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

Oracle 高级网络压缩 白皮书

英文版白皮书在这里 或 这里。 本文包括了对英文白皮书的翻译&#xff0c;和我觉得较重要的要点总结。 执行概述 Oracle Database 12 引入了一项新功能&#xff1a;高级网络压缩&#xff0c;作为高级压缩选项的一部分。 本文概述了高级网络压缩、其优点、配置细节和性能分析…

C# 线程本地存储 为什么线程间值不一样

一&#xff1a;背景 1. 讲故事 有朋友在微信里面问我&#xff0c;为什么用 ThreadStatic 标记的字段&#xff0c;只有第一个线程拿到了初始值&#xff0c;其他线程都是默认值&#xff0c;让我能不能帮他解答一下&#xff0c;尼玛&#xff0c;我也不是神仙什么都懂&#xff0c…

Dockerfile中CMD命令的用法,你了解几个?

文章目录 1.问题描述2.解决方法3.问题原因分析4.CMD常见的用法4.1 执行应用程序4.2 使用 Shell 执行命令4.3 定义环境变量 5.最佳实践 1.问题描述 今天在进行业务调试时, 发现调试的java应用所在的容器无限重启&#xff0c;经过排查发现问题出在Dockerfile 文件中的CMD命令上&…

设计模式下

一、代理模式 一、概念 代理模式就是给一个对象提供一个代理&#xff0c;并由代理对象控制对原对象的引 用。它使得客户不能直接与真正的目标对象通信。代理对象是目标对象的代表&#xff0c; 其他需要与这个目标对象打交道的操作都是和这个代理对象在交涉。 例如&#xff1a;去…

安装 nvm

前言&#xff1a; nvm 即 node 版本管理工具 (node version manager)&#xff0c;好处是方便切换 node.js 版本。 通过将多个 node 版本安装在指定路径&#xff0c;然后通过 nvm 命令切换时&#xff0c;就会切换我们环境变量中 node 命令指定的实际执行的软件路径。 使用场景…

Selenium自动化测试之学会元素定位

这是我经常被问到的一个问题&#xff0c;也是我很讨厌回答的问题&#xff0c;因为要想回答这个问题需要知道上下文。什么样式的元素&#xff0c;有哪些属性&#xff0c;是否有表单嵌套&#xff0c;都尝试了哪些定位方法。。。而且没几个提问者能事先详细的说明这些。哪儿像提bu…

宠物互联网医院系统:数字化呵护你爱宠的新时代

宠物互联网医院系统正在为宠物主人提供一种前所未有的数字化健康护理体验。通过结合创新技术&#xff0c;这一系统旨在让宠物医疗变得更加便捷、智能和个性化。让我们深入探讨宠物互联网医院系统的技术核心&#xff0c;以及如何应用代码为你的爱宠提供最佳关怀。 1. 远程医疗…

操作系统-进程控制(如何实现进程控制 如何实现原子性 相关进程控制原语)

文章目录 什么是进程控制总览如何实现进程控制&#xff1f;如何实现原语的“原子性”&#xff1f;进程控制相关的原语创建原语撤销原语子进程与父进程阻塞与唤醒原语切换原语 小结 什么是进程控制 控制进程的状态变换 总览 如何实现进程控制&#xff1f; 原语实现 假设不是原…

离线直线度测量仪的三种类型

智能型离线直线度测径仪主要用于金属棒材、管材、陶瓷管材等产品在生产节拍时间充裕时的直径和直线度检测。测量方便&#xff0c;自动将检测数据显示于显示屏上。 离线直线度测量仪使用前&#xff0c;设置产品规格&#xff0c;在更换轧材规格时&#xff0c;在设置一次&#xff…

强化学习:MuJoCo机器人强化学习仿真入门(1)

声明&#xff1a;我们跳过mujoco环境的搭建&#xff0c;搭建环境不难&#xff0c;可自行百度 下面开始进入正题&#xff08;需要有一定的python基础与xml基础&#xff09;&#xff1a; 下面进入到建立机器人模型的部分&#xff1a; 需要先介绍URDF模型文件和导出MJCF格式 介绍完…

【MATLAB源码-第123期】基于matlab的SSK(空间位移键控)调制和QSSK(正交空间位移键控)调制误码率对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. SSK&#xff08;空间位移键控&#xff09;&#xff1a; - 基本原理&#xff1a;SSK是一种MIMO&#xff08;多输入多输出&#xff09;系统中的调制技术。它通过选择性地激活不同的发送天线来传输信息。在每个时间槽&…

第十三回 赤发鬼醉卧灵官殿 晁天王认义东溪村-FreeBSD 下编辑文件ee 用法

话说雷横绑了一个大汉&#xff0c;先押到晁保正庄上讨些点心吃。这东溪村的保正叫晁盖&#xff0c;人称他托塔天王。晁盖热情接待了雷横和士兵们&#xff0c;自己却趁着他们喝酒的时候尿遁去看那大汉。原来那大汉就是来找晁保正的&#xff0c;于是谎称他是晁盖的外甥&#xff0…

【K8S 云原生】K8S的包包管理器-helm

目录 一、helm概念 1、什么是helm 2、helm的概念&#xff1a; 二、实验部署&#xff1a; 1、安装helm&#xff1a; 2、对chart仓库的基本使用&#xff1a; 2.1、查看和更新chart仓库 2.2、安装chart 2.3、卸载chart&#xff1a; 3、helm自定义模版&#xff1a; 3.1、…

【Linux】【实战系列】10 分钟掌握日常开发中 Linux 网络处理相关命令

文章目录 lsofnetstatpingnslookupsshssh-keygenscpsftp 网络工具 curl网络工具 wget最后个人简介 hello&#xff0c;大家好&#xff0c;我是 Lorin&#xff0c;上一期和大家分享一期日常开发中常用的 Linux 文件和文本命令实战教学&#xff0c;这一期给大家带来常用的网络处理…

k8s部署Ingress

前提&#xff1a;有自备的域名&#xff0c;没有域名可用主机配置的域名解析代替测试 #主机配置的域名 vi /etc/hosts #追加以下内容 127.0.0.1 kuboard1、部署Ingress vi deploy.yaml #输入以下内容apiVersion: v1 kind: Namespace metadata:labels:app.kubernetes.io/instan…

git使用指南——以gitlab为例

注册gitlab 自行注册 新建项目 选择新建一个空白的项目 上传项目 clone项目地址到本地 执行完之后&#xff0c;会在目录下生成如下内容&#xff1a;进入里面&#xff0c;选择.git&#xff0c;要上传的内容&#xff08;资料或代码复制到该目录下&#xff09;&#xff1a;…

华夏基金“冰火两重天”:产品增量不增值,靠什么赢得用户?

近日&#xff0c;华夏基金发布关于华夏野村日经225交易型开放式指数证券投资基金&#xff08;QDII&#xff09;&#xff08;下称“华夏野村日经ETF”&#xff09;二级市场交易价格溢价风险提示及临时停牌公告。 公告内容显示&#xff0c;华夏野村日经ETF二级市场交易价格明显高…