AspNet Core Web 应用程序的启动 当项目中 没有Startup.cs 类如何设置启动 配置等等

szlblog 2018-01-09 原文

AspNet Core Web 应用程序的启动 当项目中 没有Startup.cs 类如何设置启动 配置等等

 

感叹: Core 16年6月1号 在中国宣布上线 到现在已经快经历两年时间了,目前版本已经到了2.0 就目前的前景来看,个人感觉 到2020年才可能有所起色,等到Core更成熟

个人看法:在.net这条路上总感觉后劲不足,市场好像越来越小了。不过学习还是要学的,毕竟很喜欢 c#

 

 

  (1)有关怎么创建Core MVC/API 这里就不说了,前段时间的博客中有说过:这里介绍的是有关 AspNetCore web 通用的基础知识,不针对单独的MVC/API介绍,也是我个人学习的结果,写出来希望和大家相互学习讨论,共同进步,希望在大家这里学到更多

  (2) 项目创建生成后我们会看到这样两个类 (Program/Startup)如图下图所示

                             

                             和我们的 ASP.NET MVC / ASP.NET Api  做比较 有关  Global.asax、FilterConfig.cs 和 RouteConfig.cs 等都被 Program.cs 和 Startup.cs两个类取而代之. 程序中 把Program.cs 作为 Web 应用程序的入口,程序启动的时候会调用 Startup.cs 类。

 Startup.cs 作用就是,对项目中用到的  静态文件,管道,服务,日志,路由,数据库连接,过滤器的注册  等  所有的有关程序的启动运行中用到的。、

                             传统的MVC/Api 使用的比较多的开发人员初步接触都会感到有点迷茫,这里我们对这两个类进行剖析。不足之处希望大家指出。

  (3) Startup  初始内容    

       public void ConfigureServices(IServiceCollection services)
        {
            //运行时调用此方法。使用此方法向容器添加服务。             
} public void Configure(IApplicationBuilder app, IHostingEnvironment env) { //运行时调用此方法。使用此方法配置HTTP请求管道 }

 

     3.1  ConfigureServices 方法 使用

                             

 public void ConfigureServices(IServiceCollection services)
        {
            //注入MVC的服务            services.AddMvc();
            // 添加 EF 服务     可以添加多个 使用多个EF 多个库
            //services.AddEntityFrameworkSqlServer().AddDbContext<EFDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServer")));
            // services.AddEntityFrameworkSqlServer().AddDbContext<EFLogDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServerLog")));
            services.AddMvc();
            // 添加自定义服务 :详见 IServiceCollection
        }

     3.2  Configure 方法的使用

 

//重新定义 IHostingEnvironment    
        public IHostingEnvironment HostingEnvironment { get; }
        //运行时调用此方法。使用此方法配置HTTP请求管道
        public void Configure(IApplicationBuilder app)
        {
            //判断当前的运行环境  是否是  Microsoft   如果是则返回true 
            // 如果要判断其他的运行环境比如Linux    可以用  env.IsEnvironment("environmentname")   要验证的环境名称   忽略大小写
            if (HostingEnvironment.IsDevelopment())
            {
                //抓取错误信息 把错误信息生成  HTML          
                //关于这个等写到关于错误处理的时候详细说明****************************                app.UseDeveloperExceptionPage();
            }
            else
            {
                //自定义错误信息帮助页
                app.UseExceptionHandler("/Home/Error");
            }
            //已被重写
            //if (env.IsDevelopment())
            //{
            //    app.UseDeveloperExceptionPage();
            //}

            //使用MVC默认路由            app.UseMvcWithDefaultRoute();
            app.UseMvc();  //使用MVC的管道路径  可以在这里配置路由等操作   
            //app.UseMvc(
            //   routes =>
            //   {
            //       routes.MapRoute(
            //      name: "User",
            //      template: "{controller}/{action}/{id?}",
            //      defaults: new { controller = "User", action = "Index" });
            //   });
            //app.UseMvc(routes =>
            //{
            //    routes.MapRoute(
            //        name: "default",
            //        template: "{controller}/{action=Index}/{id?}");
            //});
        }

 

                             有关 IHostingEnvironment          参考 https://msdn.microsoft.com/zh-cn/library/system.web.hosting.hostingenvironment.aspx

 

  (4) Program类  初始内容 

 

public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }

    4.1实现不依赖 Startup 启动程序  直接在 Program 类中 构建  扩展,配置,配置 ,扩展,日志

public class Program
    {
        public static IServiceCollection services { get; set; }
        public static IHostingEnvironment HostingEnvironment { get; set; }
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                    //构建  扩展,配置,配置 ,扩展,日志,ILoggerFactory
                    .ConfigureAppConfiguration((WebHostBuilderContext, config) =>
                    {
                        HostingEnvironment = WebHostBuilderContext.HostingEnvironment;
                    })
                .ConfigureServices((IServiceCollection, services) =>
                 {
                     services.AddMvc();
                 })
            .Configure(app =>
            {
                if (HostingEnvironment.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Error");
                }
                //使用MVC默认路由                app.UseMvcWithDefaultRoute();
                //使用静态文件
                app.UseStaticFiles("");
                //配置路由
                app.UseMvc(routes =>
                {
                    routes.MapRoute(
                        name: "default",
                        template: "{controller}/{action=Index}/{id?}");
                });
            })
                //被替换掉的启动项
                //  .UseStartup<Startup>()                .Build();
    }

 

 

 
    不足之处希望大家指出,相互交流学习
   
    
   

 

 

发表于 2018-01-09 19:31 乐途 阅读() 评论() 编辑 收藏

 

版权声明:本文为szlblog原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/szlblog/p/8253132.html

AspNet Core Web 应用程序的启动 当项目中 没有Startup.cs 类如何设置启动 配置等等的更多相关文章

  1. 详解k8s零停机滚动发布微服务 – kubernetes

    1、前言 在当下微服务架构盛行的时代,用户希望应用程序时时刻刻都是可用,为了满足不断变化的新业务,需要不断升级 […]...

  2. 基于Asp.Net Core 5.0依赖Quartz.Net框架编写的任务调度web管理平台

    源码地址: https://github.com/246850/Calamus.TaskScheduler 演 […]...

  3. 使用Microsoft.AspNetCore.TestHost进行完整的功能测试

    简介 Microsoft.AspNetCore.TestHost是可以用于Asp.net Core 的功能测试 […]...

  4. Asp.Net Core学习笔记:(二)视图、模型、持久化、文件、错误处理、日志

    TagHelper 入门 优点:根据参数自动生成,不需要手写超链接,类似Django模板里面的url命令。 在 […]...

  5. asp.net core 2.0+sqlsugar搭建个人网站系列(0)

    一些废话   马上就要过年了,回顾这一年最大的收获就是技术有了很大的提升,其他的方面没有什么改变,现在还是单身 […]...

  6. aspnetcore 实现简单的伪静态化

    aspnet core 实现简单的伪静态化 aspnetcore 实现简单的伪静态化 Intro 在我的活动室 […]...

  7. “ShardingCore”是如何针对分表下的分页进行优化的

    分表情况下的分页如何优化 首先还是要给自己的开原框架打个广告 sharding-core 针对efcore 2 […]...

  8. efcore分表下”完美”实现

    ShardingCore 如何呈现“完美”分表   这篇文章是我针对efcore的分表的简单介绍,如果您有以下 […]...

随机推荐

  1. 企查猫app数据解密

    通过最近几天的对企查猫的研究,目前已经成功将企查猫的数据加密和响应数据加密完成解密。 和之前对启信宝APP的数 […]...

  2. 使用表类型(Table Type)实现百万级别的数据一次性毫秒级别插入

    使用表类型(Table Type)实现百万级别的数据一次性插入 思路 1 创建表类型(TaBleType)  […]...

  3. C# PDF添加水印

    需要iTextSharp.dll, 下载地址http://sourceforge.net/projects/i […]...

  4. SpringBoot JPA查询映射到自定义实体类

    JPA返回指定实体对象 和 SegmentFault上的文章(https://segmentfault.com […]...

  5. Python编程学习第三课之编程从Hello World开始

    在搞定了前几节课的情况下,大家是否有一种想要跃跃欲试的赶脚,接下来就是我们开始练手的实战时刻。 每个编程人员入 […]...

  6. php sql语句中in的用法

    很多时候我们在php中已经感觉将sql语句中in里面放一个数组刚好,但是结果往往跟我们想的不一样,打印出sql […]...

  7. python程序 当使用到有关图像的package时,报错“This application failed to start because it could not find or load the Qt Platforms”的解决方法

    当前环境: 系统:MacBook Pro Catalina 10.15.2 python: 3.7.3 集成环 […]...

  8. [计算机网络]-知识点整理 第一章-计算机网络概述

    计算机网络的一些相关知识 1.三网——电信网络,有线电视网络,计算机网络 2.计算机网络:是一个将分散的、具有 […]...

展开目录

目录导航