.net core学习笔记

以下笔记为观看B站视频.NET5零基础到精通实战全集过程中的值得记录的地方。

.net开发最新发展历程

c#6 新特性:

  • lamda表达式简化函数
  • string.format
  • using static 可直接访问静态类静态方法
  • ?只能为可空类型服务 , ??检查并提供默认值
  • try catch 增加 where
  • nameof(class) //将类的名称转换成字符串
  • 使用索引器初始化关联数组

c#7 新特性:

  • Out变量
  • 元祖初始化、拷贝都很方便,函数可返回元祖,也可由于out形参
  • 弃元(函数返回值)
  • 模式
  • 本地方法/本地函数(即:函数中再声明实现一个函数)
  • 默认文本表达式
  • 数字语法改进
  • 命名实参(用:说明)
  • private protected访问修饰符-新复合访问修饰符
  • 增强的泛型约束(增加了enum约束)约束不能为空
  • 通用的异步返回类型

c#8 新特性:

  • 默认接口方法(可在接口中实现)
  • switch表达式+lamda表达式
  • 属性模式
  • 元祖模式
  • 位置模式
  • 静态本地函数
  • 异步流

c#9 新特性:

  • 记录(针对属性、针对方法)
  • 顶级语句(与pythonl类似!!!)
  • 对象声明(简化)
  • 静态修饰(lamda表达式中)
  • 模式匹配(简化判断)
  • 为空判断(is not null)
  • 协变返回值
  • 子类重写父类函数时,返回值可为子类!
  • 新增数据类型nint、nuint、nfloat等,n为native的缩写,这些类型的大小取自于编译环境原生的数据大小,比如x32占4字节、x64占8字节
  • lamda参数弃元
  • 关系匹配

Asp.net core 开发(5.0版本)

.net core sdk 5.0下载地址:

https://dotnet.microsoft.com/download

目前最新的版本:5.0.400 (2021-08-13)

创建项目并开始使用

  1. MVC 框架(不是前后端分离!但很经典,目前也有应用场景)

  2. 使用中间件(Session)

  3. Log4net组件(用于记录日志)

  4. 项目发布:

    • VS里直接发布

    • IIS发布

    • CMD命令行发布(dotnet)

  5. 静态文件读取

  6. Nuget引入:Microsoft.Extensions.FileProviders System.IO

  7. 配置文件读取静态文件的中间件

  8. 脚本启动时传参,项目中获取参数(控制器中通过构造函数注入IConfiguration)

  9. 获取配置文件中的内容(可在startup.cs和控制器中获取)

    • 通过IConfiguration索引取值。用冒号分割类和数组
    • 建立一个新的类,通过Ioption读取

MVC

1. 什么是MVC?
  • V—View—视图:呈现给用户看到的内容(表现层)

  • C—Controller—控制器:控制业务逻辑计算,调用服务,选择返回什么内容,可以返回视图,JSON、字符串等等。

  • M—-Model—视图模型:用作控制器和视图之间传递数据的载体。

2. cshtml文件

​ 本质是一个类文件,也是个压缩式超文本语言,HTML的子集。

Razor混编:可以在cshtml上写 后台C#代码 + 前台html代码,混合起来写。(可看出严重的前后端不分离,代码可读性可能会差些)

3. Razor实时预览

如何解决修改视图后无需编译后即可生效?

//修改视图,增加了html代码,不能马上生效,怎么办?使用中间件

1
2
Nuget引入:Microsoft.ASPNetCore.Mvc.Razor.RuntimeCompilation
startup.cs中增加:Services.AddRazorPage().AddRazorRuntimeCompilation();
4. webpage布局

通过 Web Pages ,您可以把重复使用的内容块(比如页面头部和底部)写在一个单独的文件中。还可以使用布局模板(布局文件)为站点的所有网页定义一致的布局。

具体使用Content Blocks(内容块)和 Layout Page(布局页)。

  • 每个页面有相同的头部

  • 每个页面有相同的底部

  • 每个页面有相同的样式和布局

前端页面加载顺序:

开始 -> Views:_ViewStart.cshtml -> _Layout.cshtml -> Other cshtml

Layout模板和其他页面的嵌套:

通过Layout中RendBody()方法做了嵌入内容页;把返回的视图替换到模板页对应的内容块中,形成了一整块的内容;目的在于每一次返回不同的页面的时候,能够吧不变的视图部分,种以重用;这样就可以少些代码。

关于CSS,JS引入的问题:

问:在模板页中使用CSS/JS的时候,为了提高效率,会把Css引入在模板的上方,将JS写在模板的下方。页面嵌套到模板页后,就会出现在引用JS的上方调用JS,此时JS其实是调用不了的。

答:因为Script是写在下面的,先加载RenderBody,后加载JQ,所以会报错。

解决方法如下:

Layout模板页添加:

1
@await RenderSectionAsync("Scripts", required: false)

其他视图添加js时使用如下格式:

1
2
3
4
5
6
7
@section Script{
<script Type="text/javascript" >
$(document).ready(fuction(){
console.log("页面已加载");
})
</script>
}
6. 防止文件被浏览

在 ASP.NET 中,文件的名称以下划线开头,可以防止这些文件在网上被浏览。

如果您不想让您的内容块或者布局页被您的用户看到,可以重命名这些文件:

_header.cshtm

_footer.cshtml

_Layout.cshtml

7. 隐藏敏感信息

在 ASP.NET 中,隐藏敏感信息(数据库密码、电子邮件密码等等)最通用的方法是将这些信息保存在一个名为”_AppStart”的单独的文件中。

1
2
3
4
5
6
7
8
9
_AppStart.cshtml

@{
WebMail.SmtpServer = "mailserver.example.com";
WebMail.EnableSsl = true;
WebMail.UserName = "username@example.com";
WebMail.Password = "your-password";
WebMail.From = "your-name-here@example.com";
}
8. Razor 扩展(HTML控件)
第一种方式:

通过一个后台方法,返回一个【已经存在】的Html标签的字符串,浏览器在读取的时候,就读取成一个Html标签。

1
2
3
4
public static IHtmlContent Img(this IHtmlHelper helper,string src,string @class)
{
return new HtmlString($"<img src='{src}' class='{@class}'/>");
}

调用:

1
2
3
4
<!--1.引入命名空间-->

<!--2.使用图片--自定义 扩展方法-->
@Html.Img("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Finews.gtimg.com%2Fnewsapp_bt%2F0%2F13234405055%2F1000&refer=http%3A%2F%2Finews.gtimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1631638948&t=284412cd9bbf3e991216504e533120a9","border:1px solid red;")
第二种方式:

//通过一个后台方法,返回一个【不存在】的Html标签的字符串,在读取的时候,通过制后台方法,去生成我们制定的标签。

1
2
3
4
5
6
1.写一个扩展方法,定义一个普通类,类名建议以TagHelper结尾,加上特性;如果没有标记特性,视图中在调用的时候使用当前类名去掉TagHelper后缀得到的的字符串来调用。

2.继承TagHelpre抽象类、或者实现接口ITagHelpr,二者选一起均可。
3.覆写或实现接口Proccss方法。
4.实现方法,定义标签类型,指定属性,指定内容
5.如果在调用的时候需要参数,可以在定义这标签的类内部,定义属性;属性名称建议首字母大写;在调用的时候保持和属性名称一致。

暂停

MVC网页开发先学习到这儿,后面内容以后再看。

接下来要学习一下Razorpages网页开发,这个模式与MVC非常类似,区别在于Razorpages将模型和控制器代码包含在Razor页面中,其模型可总结为MVVM(model-view view-model)。

Razorpages优点:

  • 开发维护更加简单
  • 单一责任,每个页面都独立,视图和代码组织在一起
  • 支持双向数据绑定
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2022 PAYIZ
  • |

感谢您的支持😊

支付宝
微信