• 我的第一个.netcore程序


    • 创建项目

    项目创建模板采用web应用程序(模型视图控制器),要用就用最新版本的ASP.NET Core3.1,注意不要勾选HTTPS配置,

    一般生产环境部署时才需要HTTPS,如果不小心勾选了,后续可以launthSettings.json 文件中,把sslPort 端口号改成0即可。

    • 项目结构介绍

    1、项目启动文件配置

    2、网站静态文件目录

    3、项目所有的依赖包和框架

    4、控制器

    5、Razor视图

    6、项目整体配置文件

    7、项目入口文件和启动类

     

    • 重要文件
     1     public class Program
     2     {
     3         public static void Main(string[] args)
     4         {
     5             CreateHostBuilder(args).Build().Run();
     6         }
     7 
     8         public static IHostBuilder CreateHostBuilder(string[] args) =>
     9             Host.CreateDefaultBuilder(args)
    10                 .ConfigureWebHostDefaults(webBuilder =>
    11                 {
    12                     webBuilder.UseStartup<Startup>();
    13                 });
    14     }
    Program.cs

    这个Program是程序的入口, 看起来很眼熟, 是因为asp.net core application实际就是控制台程序(console application).

    它是一个调用asp.net core 相关库的console application. 

    Main方法里面的内容主要是用来配置和运行程序的。

     因为我们的web程序需要一个宿主,所以CreateHostBuilder这个方法就创建了一个IHostBuilder. 而且我们还需要Web Server.

     asp.net core 自带了两种http servers, 一个是WebListener, 它只能用于windows系统, 另一个是kestrel, 它是跨平台的.

    kestrel是默认的web server, 就是通过UseKestrel()这个方法来启用的.

    但是我们开发的时候使用的是IIS Express, 调用UseIISIntegration()这个方法是启用IIS Express, 它作为Kestrel的Reverse Proxy server来用.

    如果在windows服务器上部署的话, 就应该使用IIS作为Kestrel的反向代理服务器来管理和代理请求.

    如果在linux上的话, 可以使用apache, nginx等等的作为kestrel的proxy server.

    当然也可以单独使用kestrel作为web 服务器, 但是使用iis作为反向代理还是有很多有优点的: 例如,IIS可以过滤请求, 管理证书, 程序崩溃时自动重启等.

    不过目前因为跨平台,所以使用较多的还是 nginx。

    webBuilder.UseStartup<Startup>();, 这句话表示在程序启动的时候, 我们会调用Startup这个类.

    Build()完之后返回一个实现了 IHost 接口的实例(IHostBuilder), 然后调用Run()就会运行Web程序, 并且阻止这个调用的线程, 直到程序关闭.

     1     public class Startup
     2     {
     3         public Startup(IConfiguration configuration)
     4         {
     5             Configuration = configuration;
     6         }
     7 
     8         public IConfiguration Configuration { get; }
     9 
    10         // This method gets called by the runtime. Use this method to add services to the container.
    11         public void ConfigureServices(IServiceCollection services)
    12         {
    13             services.AddControllersWithViews();
    14         }
    15 
    16         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    17         public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    18         {
    19             if (env.IsDevelopment())
    20             {
    21                 app.UseDeveloperExceptionPage();
    22             }
    23             else
    24             {
    25                 app.UseExceptionHandler("/Home/Error");
    26             }
    27             app.UseStaticFiles();
    28 
    29             app.UseRouting();
    30 
    31             app.UseAuthorization();
    32 
    33             app.UseEndpoints(endpoints =>
    34             {
    35                 endpoints.MapControllerRoute(
    36                     name: "default",
    37                     pattern: "{controller=Home}/{action=Index}/{id?}");
    38             });
    39         }
    40     }
    Startup.cs

    其实Startup算是程序真正的切入点,是配置服务和中间件的启动类。

    Startup 默认构造函数,注入了配置项 IConfiguration。

    ConfigureServices方法是用来把services(各种服务, 例如identity, ef, mvc等等包括第三方的, 或者自己写的)加入(register)到container(asp.net core的容器)中去, 并配置这些services. 这个container是用来进行dependency injection的(依赖注入). 所有注入的services(此外还包括一些框架已经注册好的services) 在以后写代码的时候, 都可以将它们注入(inject)进去. 例如上面的Configure方法的参数, app, env, loggerFactory都是注入进去的services.

    Configure 方法是asp.net core程序用来具体指定如何处理每个http请求的, 例如我们可以让这个程序知道我使用mvc来处理http请求, 那就调用 app.UseEndpoints 这个方法就行,这个是一个短路中间件,表示 http 请求到了这里就不往下走了.  

     1 public void ConfigureServices(IServiceCollection services)
     2         {
     3             services.AddControllersWithViews();
     4 
     5             //services.AddDbContext<YFDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("EFStr")), ServiceLifetime.Singleton, ServiceLifetime.Singleton);
     6             services.AddDbContext<YFDbContext>(options =>
     7             {
     8                 options.UseSqlServer(Configuration.GetConnectionString("EFStr"));
     9 
    10             }, ServiceLifetime.Singleton);
    11         }
    通过ConfigureServices方法注入EFCore的数据库上下文示例
  • 相关阅读:
    Comprehend-Elasticsearch-Demo5
    Mxnet使用TensorRT加速模型--Mxnet官方例子
    Mxnet模型转换ONNX,再用tensorrt执行前向运算
    MxNet模型转换Onnx
    基于Flask-APScheduler实现添加动态定时任务
    Golang习题
    算法题
    Celery使用指南
    flask拓展(数据库操作)
    flask进阶(上下文源管理源码浅析)
  • 原文地址:https://www.cnblogs.com/yrup/p/13025154.html
Copyright © 2020-2023  润新知