none
asp.net core 怎么在非asp.net core的.net 项目上启动运行? RRS feed

  • 问题

  • 想在非asp.net core类型的.net项目上启动一个asp.net core,嵌入到非asp.net core 的控制台项目,根据网上资料查找,创建一个控制台程序,编写如下代码

    using ConsoleApp1.test;
    using DynamicWeb.core;
    using DynamicWeb.listen;
    using DynamicWeb.test;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.Extensions.DependencyInjection;
    using System;
    using System.IO;
    using System.Net;
    using System.Net.Http;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var host = new WebHostBuilder()
                    .UseKestrel()
                    .UseContentRoot(Directory.GetCurrentDirectory())
                    .UseStartup<Startup>()
                    .UseUrls("http://+:8080/").Build();
           
                host.Run();
    
            }
        }
    
        public class Startup
        {
            public void ConfigureServices(IServiceCollection services)
            {
       
            }
            public void Configure(IApplicationBuilder app)
            {
                app.Run(context =>
                { 
                    var data = System.Text.Encoding.UTF8.GetBytes("Hello World from the ASP.Net CORE!");
                    context.Response.Body.Write(data, 0, data.Length);
                    return Task.CompletedTask;
                });          
            }
        }
    }

    控制台启动,有一个Ctrl+c的关闭提示,这个Ctrl+c的关闭功能能关掉么?

    谷歌浏览器,127.0.0.1:8080/测试,显示请求无法处理。

    不能获取请求进行处理,请问还缺少了什么?



    • 已编辑 Trian555 2020年7月1日 12:44
    2020年7月1日 12:43

全部回复

  • Hello Trian555,

     

    你的问题有两个:

    1. 在Console App里启动一个WebHost监听8080端口的时候,不能接到请求。

    2. 是否能关闭Ctrl+c的关闭提示.

     

    对于第一个问题,项目升级到core 3.0之后,AllowSynchronousIO默认值是false,也就是关闭的。这个时候如果你在VS里面debug,应该会发现有报错信息。 解决方案是你在配置Kestrel 时候手动打开,或者使用async方法。下面我提供的工作代码是手动设置AllowSynchronouosIO的值为true。

    第二个问题的的答案是,可以关闭。不过由于相关的log信息都是一起打印的,如果关闭了Ctrl+C的提示,之前的Now Listening 等信息也会被关闭。

    示例代码如下:

    static void Main(string[] args)
            {
                var host = new WebHostBuilder()
                     .UseKestrel()
                     .UseContentRoot(Directory.GetCurrentDirectory())
                     .UseStartup<Startup>()
                     .UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "True")
                     .UseUrls("http://+:8080/")
                     .ConfigureKestrel((context, options) =>
                     {
                         options.AllowSynchronousIO = true;
                     }).Build();
    
                host.Run();
    
                Console.ReadKey();
    
            }
    
            public class Startup
            {
                public void ConfigureServices(IServiceCollection services)
                {
    
                }
                public void Configure(IApplicationBuilder app)
                {
                    app.Run(context =>
                    {
                        var data = System.Text.Encoding.UTF8.GetBytes("Hello World from the ASP.Net CORE!");
                        context.Response.Body.Write(data, 0, data.Length);
                        return Task.CompletedTask;
                    });
                }
            }

    希望回答能够帮助到你。

    Best regards,

    Sean

    2020年7月22日 6:48