初识.NetCore-web mvc程序初始文件解析

 

  之前一直做netframework相关的开发,最近公司的项目想向微服务靠近,在经过各个技术选型之后,决定使用netcore。

  但是理想很丰满,现实很骨感。在使用netcore进行微服务相关开发之前,先需要把netcore学会。自己工作也有个五六年了,从来没有做过一次正式的总结归纳,对使用到的技术也没有一个深入的理解,所以向借这次学习netcore机会,将自己的理解记录下来,如果有什么不对的,也欢迎广大同胞批评指正。 

netcore的安装过程就不多说了,可以在安装VS时勾选net core安装项或直接从官方网站下载,本篇文章主要会描述一下netcore的web项目结构。

 创建一个netcore web项目,创建完成后初始的结构如下图所示:

   创建完之后肯定一脸懵逼,跟使用framework创建网站的项目还是有一定差别的,我们先看看几个不认识的文件:

 launchSettings.json

程序的启用配置文件,用于程序的启用准备工作,我们可以在此文件中配置环境变量、启动端口等。

{
  "iisSettings": {                            //当选择以IIS启动时
    "windowsAuthentication": false,           //是否开启windows身份验证
    "anonymousAuthentication": true,           //是否开启匿名身份验证
    "iisExpress": {
      "applicationUrl": "http://localhost:11974/",   //启动时的地址和端口号(端口随机的)
      "sslPort": 0                      //SSL端口
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"       //标志环境,有三个值:1.Development 开发环境 2.Staging 预发布环境 3.Production 生产环境
      }
    },
    "ExampleTest": {                    //选择以本地控制台方式启动时 删了这个节点 则不可使用控制台方式启动
      "commandName": "Project",              
      "launchBrowser": true,
      "launchUrl": "http://localhost:5000/",         //启动时的端口
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"      
      }
    }
  }
}    

_ViewImports.cshtml

用来统一指定View中需要饮用到的命名空间。在之前framework的Razor模式,每个View页面都需要分别添加using xxx之类的引用代码,而现在只需要在_ViewImports文件中添加一次,全部View都可使用。

@using com.netcore.www   //
@using com.netcore.www.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers  //释义:https://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-4_3_6_1-introduction-to-tag-helpers.html

_ViewStart.cshtml

指定模版页。

扫描二维码关注公众号,回复: 3646730 查看本文章
@{
    Layout = "_Layout";
}

  _ViewStart.cshtml文件一般情况下存在于Views文件夹下,但是Views下的文件夹中也可以以添加此文件。

如上图所示,Views文件与Home文件下各有一个_ViewStart.cshtml文件,执行顺序为:

 2 > 1

需要注意的是:Home文件夹的视图使用的模版页由1指定

appsettings.json 

NetCore中不再支持原来的web.config配置文件,取而代之的是jsonXML配置文件。

官方推荐的项目配置方式是使用appsettings.json 配置文件

其实将web.config  改为app.config 引入项目根目录,一样可以通过ConfigurationManager读取app.config内容

但是需要去除config文件中与需要的配置无关的内容,主要是<system.web>,<system.webServer><system.codedom>等典型asp.net标签

Programs.cs 

netcore程序其实是使用一个控制台来启动web程序,而Programs.cs文件就是控制台的启动项

StartUp.cs 

通过ConfigureServices和Configure方法,来完成依赖注入和中间件管道的搭建,个人认为是netcore最复杂也最重要的部分。

public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        /// <summary>
        /// 注册程序所需的service 
        /// </summary>
        /// <param name="services">Services.</param>
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            //注册MVC服务
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

        /// <summary>
        /// 注册程序使用的中间件 指定程序如何响应每一个HTTP请求
        /// </summary>
        /// <param name="app">App.必须有此参数</param>
        /// <param name="env">Env.程序环境 非必填</param>
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    } 
Configure参数:
    • IApplicationBuilder  参数为必须的
    • IApplicationEnvironment:   提供访问应用程序属性。类似于ApplicationNameApplicationVersion以及ApplicationBasePath可在Startup的构造函数和Configure方法中使用
    • IHostingEnvironment: 提供了当前的EnvironmentNameWebRootPath以及Web根文件提供者。可以在Startup的构造函数和Configure方法中使用
    • ILoggerFactory: 提供了创建日志的机制。可以在Startup的构造函数或Configure方法在红使用 
    • IServiceCollection : 当前容器中各服务的配置集合。只能在ConfigureService方法中使用,只有在ConfigureService方法中配置后,此服务在应用程序中才变得可用

 

猜你喜欢

转载自www.cnblogs.com/SongHot/p/9822503.html