首页 > 编程语言 >图解AspNetCore和Furion(1):应用启动

图解AspNetCore和Furion(1):应用启动

时间:2022-08-28 12:22:13浏览次数:60  
标签:webHostBuilder Run string AspNetCore Startup public Furion 图解 app

一、和AspNetCore5相比,从6开始,将Program和Startup类合并,直接在入口类中启动服务和中间件。同时,项目可以启动miniApi,直接在Program中设置路由和控制器。实际项目中,还是推荐使用控制器的方式。

 

 

  

 

二、Furion定义了静态类Serve,对AspNetCore的启动类进行了封装,同时支持Startup的合并和分离写法,更加简单和易用。

 

  

三、应用启动时,框架为我们启动了内置的跨平台服务器Kestrel。Kestrel可以作为服务器自托管,也可以托管在IIS中(限Windows平台),或者在客户端与Kestrel之间架设反向代理服务器(跨平台,推荐)。Kestrel与IIS、Nginx的关系如下:

 

  

 四、延伸知识点

1、AspNetCore6中实现Startup的方法之一,保持使用6版本的新类WebApplication

//Program.cs
public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);
        var startup = new Startup(builder.Configuration);
        startup.ConfigureServices(builder.Services);

        var app = builder.Build();
        startup.Configure(app, app.Environment);
        app.Run();
    }
}

//Startup.cs
public class Startup
{
    public IConfiguration Configuration { get; }

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

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
        ......
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (!env.IsDevelopment())
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        ......
    }
}

 

2、Serve静态类源码,定义的Run方法的多个重载。可以看到,Furion使用的还是AspNetCore5及之前版本的Host静态类及其方法,这样用利于使用Startup。

public static class Serve
{
    //默认 5000/5001 端口
    public static void Run(string url = default)
    {
        Host.CreateDefaultBuilder(Environment.GetCommandLineArgs())
            .ConfigureWebHostDefaults(webHostBuilder =>
            {
                webHostBuilder.Inject()
                              .ConfigureServices((context, services) =>
                              {
                                  // 默认配置控制器、动态 WebAPI 和规范化结果
                                  services.AddCorsAccessor();
                                  services.AddControllers().AddInjectWithUnifyResult();
                              })
                              .Configure((context, app) =>
                              {
                                  if (context.HostingEnvironment.IsDevelopment())
                                  {
                                      app.UseDeveloperExceptionPage();
                                  }
                                  app.UseUnifyResultStatusCodes();
                                  app.UseHttpsRedirection();
                                  app.UseStaticFiles();
                                  app.UseRouting();
                                  app.UseCorsAccessor();
                                  app.UseAuthentication();
                                  app.UseAuthorization();
                                  app.UseInject(string.Empty);
                                  app.UseEndpoints(endpoints =>
                                  {
                                      endpoints.MapControllers();
                                  });
                              });
                if (!string.IsNullOrWhiteSpace(url))
                {
                    webHostBuilder.UseUrls(url);
                }
            })
            .Build()
            .Run();
    }

    //Web 主机更多配置
    //默认 5000/5001 端口
    //泛型主机更多配置
    public static void Run(Action<IWebHostBuilder> webHostBuilderConfigure, string url = default, Action<IHostBuilder> hostBuilderConfigure = default)
    {
        var hostBuilder = Host.CreateDefaultBuilder(Environment.GetCommandLineArgs())
              .ConfigureWebHostDefaults(webHostBuilder =>
              {
                  webHostBuilder.Inject();
                  // 自定义端口
                  if (!string.IsNullOrWhiteSpace(url))
                  {
                      webHostBuilder.UseUrls(url);
                  }
                  webHostBuilderConfigure(webHostBuilder);
              });
        hostBuilderConfigure?.Invoke(hostBuilder);
        hostBuilder.Build().Run();
    }
}

 

标签:webHostBuilder,Run,string,AspNetCore,Startup,public,Furion,图解,app
From: https://www.cnblogs.com/functionMC/p/16632531.html

相关文章

  • 图解tcpip(第5版) pdf
    高清扫描版下载链接:https://pan.baidu.com/s/16Owjujj9v7AHYp408FHgKg点击这里获取提取码这是一本图文并茂的网络管理技术书籍,旨在让广大读者理解TCP/IP的基本知识、掌握......
  • 图解Mysql七种连接
    图解Mysql七种连接1导入数据左边是员工表,右边是部门表2内连接结论:内连接会查询出两个表共有的数据#内连接SELECT*FROMtbl_deptaINNERJOINtbl_emp......
  • 视图解析器的使用
     目前web应用都是使用前后端分离的开发方式,在这种方式下,其实不会用到springmvc的视图解析器。官网上有这么一段话:Anappropriatehandlerissearchedfor.Ifahandler......
  • Tomcat AJP ghostcat (CVE-2020-1938) 图解分析
    上周扫描到一个TomcatAJP,无法利用。具体扫描方法是设置自定义属性。但是目标机器删掉了ROOT文件夹也没有设置context。所以研究一下TomcatAJP,顺带看看Tomcat源码,找......
  • 乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - 官方扩展集锦(Microsoft.AspN
    什么是Microsoft.AspNetCorehttps://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/metapackage-appASP.NETCore共享框架(Microsoft.AspNetCore.App)包含由Micr......
  • 【数据结构】红黑树与平衡二叉树的区别以及原理详解(附图解)
    引用网址:https://blog.csdn.net/weixin_44780082/article/details/112239269文章目录前言一、什么是红黑树1.1平衡二叉树1.2红黑树1.3平衡二叉树和红黑树的区别二、红黑......
  • 浅谈 Raft 分布式一致性协议|图解 Raft
    前言本篇文章将模拟一个KV数据读写服务,从提供单一节点读写服务,到结合分布式一致性协议(Raft)后,逐步扩展为一个分布式的,满足一致性读写需求的读写服务的过程。其中将配合引......
  • 图解 Kafka 超高并发网络架构演进过程
    阅读本文大约需要30分钟。大家好,我是华仔,又跟大家见面了。上一篇作为专题系列的第一篇,我们深度剖析了关于Kafka存储架构设计的实现细节,今天开启第二篇,我们来深......
  • 全网最全的权限系统设计方案(图解)
    1为什么需要权限管理日常工作中权限的问题时时刻刻伴随着我们,程序员新入职一家公司需要找人开通各种权限,比如网络连接的权限、编码下载提交的权限、监控平台登录的权限、......
  • Redis---zset有序集合(底层原理+图解)
    1.前言顾名思义,Rediszset(有序集合)中的成员是有序排列的,它和set集合的相同之处在于,集合中的每一个成员都是字符串类型,并且不允许重复;而它们最大区别是,有序集合是有序的,s......