C# 在netcore控制台应用程序中使用web服务器进行简单路由

C# 在netcore控制台应用程序中使用web服务器进行简单路由,c#,asp.net-core,kestrel-http-server,C#,Asp.net Core,Kestrel Http Server,我在和红隼一起工作时遇到了麻烦 我找不到任何关于如何在netcore控制台应用程序中实现这一点的好教程 我想建立一个简单的网络服务器,将有2-3个端点,我可以访问 public class WebServer { public static void Init() { IWebHostBuilder builder = CreateWebHostBuilder(null); IWebHost host = builder.Build();

我在和红隼一起工作时遇到了麻烦

我找不到任何关于如何在netcore控制台应用程序中实现这一点的好教程

我想建立一个简单的网络服务器,将有2-3个端点,我可以访问

public class WebServer
{
    public static void Init()
    {
        IWebHostBuilder builder = CreateWebHostBuilder(null);
        IWebHost host = builder.Build();
        host.Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .Build();

        return WebHost.CreateDefaultBuilder(args)
            .UseUrls("http://*:5000")
            .UseConfiguration(config)
            .UseStartup<Startup>();
    }

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRouting();
            // ????
        }

        public void Configure(IApplicationBuilder app)
        {
            // ????
        }
    }
}
公共类Web服务器
{
公共静态void Init()
{
IWebHostBuilder=CreateWebHostBuilder(空);
IWebHost主机=builder.Build();
host.Run();
}
公共静态IWebHostBuilder CreateWebHostBuilder(字符串[]args)
{
var config=new ConfigurationBuilder()
.SetBasePath(目录.GetCurrentDirectory())
.Build();
返回WebHost.CreateDefaultBuilder(args)
.useURL(“http://*:5000”)
.UseConfiguration(配置)
.UseStartup();
}
公营创业
{
public void配置服务(IServiceCollection服务)
{
services.AddRouting();
// ????
}
公共void配置(IApplicationBuilder应用程序)
{
// ????
}
}
}

文件>新建项目>空的ASP.NET核心应用程序

为了在控制台应用程序中运行它,请确保在VisualStudio的“运行”下拉列表中选择项目的名称

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用Microsoft.AspNetCore;
使用Microsoft.AspNetCore.Builder;
使用Microsoft.AspNetCore.Hosting;
使用Microsoft.AspNetCore.Http;
使用Microsoft.AspNetCore.Mvc;
使用Microsoft.Extensions.DependencyInjection;
命名空间WebApplication7
{
公共课程
{
公共静态void Main(字符串[]args)
{
CreateWebHostBuilder(args.Build().Run();
}
公共静态IWebHostBuilder CreateWebHostBuilder(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup();
}
公营创业
{
//此方法由运行时调用。请使用此方法将服务添加到容器中。
//有关如何配置应用程序的更多信息,请访问https://go.microsoft.com/fwlink/?LinkID=398940
public void配置服务(IServiceCollection服务)
{
services.AddMvc();
}
//此方法由运行时调用。请使用此方法配置HTTP请求管道。
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
}
公共类MyEndpoint:控制器
{
[路线(“”)
public IActionResult Get()
{
返回新的OkResult();
}
}
}

为什么不将Web API模板与
dotnet new webapi一起使用呢?您试图做的正是该模板所做的——一个创建和启动主机的控制台应用程序。控制器、路由和端点通过调用添加到
AddControllers
UseRouting
UseEndpoints
@PanagiotisKanavos项目已经完成99%,此请求是一个延迟添加。我不想启动一个新项目,并将所有代码和重构都转移到它周围。我希望只将所需的代码添加到我现有的项目中,但是,您接受的答案表明了这一点,或者更确切地说是添加了MVC基础设施,而不仅仅是像WebAPI这样的端点
MyEndpoint
有一个控制器,它的答案是可以接受的,我只需要添加两行代码就可以让它工作。你的建议是建立一个新的项目,这将导致更多的工作,我希望。MVC的东西可能有些过分,但如果你能提供一个代码示例,让我可以轻松地将它添加到我现有的项目中,我非常乐意尝试并了解它。谢谢!AddMvc()和UseMvc()就是我所需要的!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;

namespace WebApplication7
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }

    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {

            services.AddMvc();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();
        }
    }

    public class MyEndpoint : Controller
    {
        [Route("")]
        public IActionResult Get()
        {
            return new OkResult();
        }
    }
}