.net core学习总结

ASP.NET Core 项目文件

  • .csproj 是根据编程语言的文档所使用
  • 不需要卸载项目就可以编辑项目文件。
  • 项目文件不包含任何文件夹或文件引用。
  • 文件系统确定哪些文件和文件夹属于项目。

TargetFramework

  • 在应用程序中指定你的目标框架(TargetFramework
  • 指定目标版本需要用到的TargetFrameworkMoniker(TFM)

AspNetCoreHostingModel

  • 指定应用程序的托管形式。
  • InProcess还是OutOfProcess
  • InProcess的值指定我们想要使用进程内托管模型,即在IIS工作进程(w3wp.exe)中托管我们的ASP.NET Core应用程序。
  • OutOfProcess的值指定我们要使用进程外托管模型,即将Web请求转发到后端的ASP.NET Core中,而整个应用程序是运行在ASP.NET Core 中内置的Kestrel中。
  • Asp.Net Core 默认采用的是OutOfRrocess托管。

PackageReference

  • 用于包含对应用程序安装的nuget包的引用
  • Metapackage(综合包)-Microsoft.AspNetCore.App
  • Metapackage本身是没有任何内容的
  • 他只是包含了其他的包依赖列表信息
  • 如果没有指定版本,则通过使用SDK隐式指定一个版本。
  • .NET Core团队建议依赖SDK指定的隐式版本,而不是在包引用上显式设置版本号。

ASP.NET Core中的Main方法

  • 控制台应用程序通常有一个Main方法
  • 为什么我们在ASP.NET Core Web应用程序中有一个Main方法
  • ASP.NET Core 应用程序在大部分情况下作为控制台应用程序
  • 启动**Main()**方法配置ASP并启动它到那时,它就变成了一个ASP-NETCore网络应用程序
  • 通过配置Main()方法,然后启动ASP.NET Core,这时它就变成了一个ASP.NET Core web应用程序

ASP.NET Core 进程内(InProcess)托管

  • **CreateDefaultBuilder()**执行的一些任务

    • 设置Web服务器
    • 加载主机和应用程序配置表信息
    • 配置日志记录
  • ASP.NET Core应用程序的托管形式

    • 在InProcess(进程内托管)或者
    • OutOfProcess(进程外托管)

ASP.NET Core 进程内(InProcess)托管

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mmCO2MSL-1586823839800)(image\image-20200201222051963.png)]

<AspNetCoreHostingModel>InProcess </AspNetCoreHostingModel>
  • 在InProcess托管的情况下,CreateDefaultBuilder()方法调用UselIS()方法并在IlS工作进程(w3wp.exe或isexpress.exe)内托管应用程序。

  • 从性能的角度来看,InProcess托管比OutOfProcess托管提供了更高的请求吞吐量。

  • 获取执行应用程序的进程名称

  • System.Diagnostics.Process.GetCurrentProcess().ProcessName
    
  • 什么是OutOfProcess托管?

    • 有2个Web服务器-内部Web服务器和外部Web服务器。
    • 内部Web服务器是Kestrel
    • 外部Web服务器可以是IISNginxApache
  • 什么是Kestrel Web Server?

    • Kestrel是ASP.NET Core的跨平台Web服务器
    • Kestrel本身可以用作边缘服务器。
    • Kestrel中用于托管应用程序的进程是dotnet.exe
  • 进程内托管

    • 该应用程序托管在IIS工作进程中
    • 只有一个Web服务器
    • 从性能角度来看,在进程托管中,优于进程外托管

ASP.NET Core 进程外(out-of-Process)托管

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pRmzyoRp-1586823839804)(image\image-20200201222015099.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uUbmmvvW-1586823839805)(image\image-20200201222444411.png)]

program与startup

  1. 这两个cs文件是asp.net系统中最重要的组成部分,分别主管程序入口及系统生命周期,startup.cs集中管理了系统的依赖注入,中间件midware,请求通道request pipeline,学习一门新技术最好的方法就是从其启动入口开始。asp.net core 程序入口就是program.cs中的主函数main

  2. program.cs文件main函数,.net core应用程序实际上就是个console app,createdefaultbuilder创建并运行一个虚拟网站托管主【加载主机和应用程序的配置信息】【配置日志记录】【设置web服务器】【设置.netcore应用程序的托管形式】

  3. startup.cs是.netcore sdk默认生成的,在configureservices里注入各种服务组件的依赖【在.net运行时调用,.net core 提供了内置的ioc容器,该方法就是将自己的服务注入到ioc容器中】,在configure中设置中间件midware,请求通道request pipeline【配置系统的http请求通道,检查处理http请求,交由中间件middleware处理,该方法的环境变量由右键解决方案属性debug中设置或是properties文件夹中launchsetting.js中设置】。

  4. 中间件/请求通道:

    1. 基本通过IApplicationBuilder创建
    2. 每个中间件都可以截获、修改、并且传递请求对象,输出响应对象
    3. 在特定情况下,某些中间件可以做短路处理,直接向前端输出相应对象
  5. 中间件顺序

    • Startup.Configure 方法添加中间件组件的顺序定义了针对请求调用这些组件的顺序,以及响应的相反顺序。 此顺序对于安全性、性能和功能至关重要

    • public void Configure(IApplicationBuilder app, IHostingEnvironment env)
      {
          if (env.IsDevelopment())
          {
              app.UseDeveloperExceptionPage();
              app.UseDatabaseErrorPage();
          }
          else
          {
              app.UseExceptionHandler("/Home/Error");
              app.UseHsts();
          }
      
          app.UseHttpsRedirection();
          app.UseStaticFiles();
          app.UseCookiePolicy();
      
          // app.UseRequestLocalization();
          // app.UseCors();
      
          app.UseAuthentication();
          // app.UseSession();
      
          app.UseMvc(routes =>
          {
              routes.MapRoute(
                  name: "default",
                  template: "{controller=Home}/{action=Index}/{id?}");
          });
      }
      
    • 以下 Startup.Configure 方法将为常见应用方案添加中间件组件:

      1. 异常/错误处理
        • 当应用在开发环境中运行时:
          • 开发人员异常页中间件 (UseDeveloperExceptionPage) 报告应用运行时错误。
          • 数据库错误页中间件 (Microsoft.AspNetCore.Builder.DatabaseErrorPageExtensions.UseDatabaseErrorPage) 报告数据库运行时错误。
        • 当应用在生产环境中运行时:
          • 异常处理程序中间件 (UseExceptionHandler) 捕获以下中间件中引发的异常。
          • HTTP 严格传输安全协议 (HSTS) 中间件 (UseHsts) 添加 Strict-Transport-Security 标头。
      2. HTTPS 重定向中间件 (UseHttpsRedirection) 将 HTTP 请求重定向到 HTTPS。
      3. 静态文件中间件 (UseStaticFiles) 返回静态文件,并简化进一步请求处理。
      4. Cookie 策略中间件 (UseCookiePolicy) 使应用符合欧盟一般数据保护条例 (GDPR) 规定。
      5. 身份验证中间件 (UseAuthentication) 尝试对用户进行身份验证,然后才会允许用户访问安全资源。
      6. 会话中间件 (UseSession) 建立和维护会话状态。 如果应用使用会话状态,请在 Cookie 策略中间件之后和 MVC 中间件之前调用会话中间件。
      7. MVC (UseMvc) 将 MVC 添加到请求管道。

路由

传统路由

  • 默认路由
  1. 映射资源必须保存在服务器中
  2. url的相对路径必须于请求路径一致
  3. 无法服务动态文件
  4. 文件必须带有后缀
  5. 暴露服务器的文件结构
app.UseMvc(routes=>
{
        routes.MapRoutes(
            name:"default",
            template:"{controller=Home}/{action=Index}/{id?}"
);

或者这样写

 app.UseMvc(routes =>
            {
                routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
            });

还可以这样写

app.UseMvcWithDefaultRoute();

UseMvcUseMvcWithDefaultRoute 可向中间件管道添加 RouterMiddleware 的实例

  • 总结

    它为 URL 路径设立了一个约定

    • 第一个路径段映射到控制器名称
    • 第二段映射到操作名称。
    • 第三段用于可选 id(用于映射到模型实体)

属性路由

将针对任意 URL 路径 //Home/Home/Index 执行 HomeController.Index() 操作

app.UseMvc()   //不加内容

使用属性路由时,控制器名称和操作名称对于操作的选择没有影响。

使用 Http[Verb] 属性的属性路由(通常适用于API而不适用于MVC)

  • 生成 REST API 时,很少会在操作方法上使用 [Route(...)]这是因为该操作将接受所有 HTTP 方法。 建议使用更特定的 Http*Verb*Attributes 来明确 API 所支持的操作。 REST API 的客户端需要知道映射到特定逻辑操作的路径和 Http 谓词。
  • 若要使属性路由减少重复,可将控制器上的路由属性与各个操作上的路由属性合并。 控制器上定义的所有路由模板均作为操作上路由模板的前缀。 在控制器上放置路由属性会使控制器中的所有操作都使用属性路由。
[Route("products")]
public class ProductsApiController : Controller
{
   [HttpGet]
   public IActionResult ListProducts() { ... }

   [HttpGet("{id}")]
   public ActionResult GetProduct(int id) { ... }
}
  • 应用于操作的以 /~/ 开头的路由模板不与应用于控制器的路由模板合并

  • 属性路由支持标记替换,方法是将标记用大括号([])括起来。 标记 [action][area][controller] 替换为定义了路由的操作中的操作名称值、区域名称值和控制器名称值。

仓库

  • IEnumerableSystem.Collections.Generic 命名空间中的集合的基接口,如 ListDictionaryStack 以及其他泛型集合,如 ObservableCollectionConcurrentStack。 可以通过使用 foreach 语句来枚举实现 IEnumerable 的集合。

  • 依赖注入

    • 仓库注册

      services.AddTransient<INoodleRepository,MockNoodleResposity>();//每次发起请求后创建一个全新的仓库,请求结束后自动注销这个仓库

      services.AddSingleton<>();//系统启动有且仅创建一个仓库,系统每次请求使用同一个仓库实例

      services.AddScoped<>();//将一系列请求或操作整合在一个事务里,这个事务有且仅创建一个实例,事务结束后会自动注销这个实例

MVVM与MVC

EF core


    services.AddDbContext<SchoolContext>(options =>
       options.UseSqlServer(Configuration.GetConnectionString("SchoolContext")));
Add-Migration InitialCreate
Update-Database

束后会自动注销这个实例

MVVM与MVC

EF core


    services.AddDbContext<SchoolContext>(options =>
       options.UseSqlServer(Configuration.GetConnectionString("SchoolContext")));
Add-Migration InitialCreate
Update-Database
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值