ASP.NET Core如何启动监听HTTP请求?

4

嗯,我现在正在学习aspnet core,我不明白应用程序何时启动服务器(如IIS或KestrelServer),以及服务器如何监听http请求并将请求转发给应用程序。有人可以帮帮我吗?谢谢


你尝试过搜索吗?如果是的话,能否分享一下你的发现? - Nagama Inamdar
我试图查看他的源代码,但是我没有找到。 - oldman
2个回答

3

好的,让我们从头开始(因为我不知道您对C#的了解程度)

每个C#应用程序都必须包含一个单独的Main方法,指定程序执行的起点。默认情况下,模板中有一个名为Program的类,您可以在其中设置要使用的Web服务器类型,并告诉服务器开始监听HTTP请求,例如:

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .AddCommandLine(args)
        .Build();
    var host = new WebHostBuilder()
                .UseKestrel()
                .UseConfiguration(config)
                .UseStartup<Startup>()
                .Build();
    host.Run();
}

在AspNetCore甚至在AspNet(MVC或WebApi)中,您可以(并且应该)使用OWIN(又名Katana或vNext,它们分别是AspNet和AspNetCore的Microsoft OWIN实现)。

OWIN代表接口(只是规范),告诉Web服务器如何与Web应用程序通信。通常它会将Http请求处理到一个管道中,您可以在其中插入中间件,例如身份验证/授权、日志、错误处理等,在管道的末尾,您应该插入您的Web应用程序。

在AspNetCore中,您通过在主机配置中使用UseStartup<MyStartupClass>来设置中间件管道,请参见上面的Main方法,并且您的管道将处理每个HttpRequest。

当在AspNetCore中构建MVC应用程序(.UseMvc())时,您正在设置一个中间件,告诉您的应用程序查找从Microsoft.AspNetCore.Mvc.Controller继承的类,以查找RESTful入口点(HTTP GET、POST...)

这只是一个简单的概述,您可以通过查看这些技术的文档来了解更多。只需搜索Katana、vNext、OWIN、OWIN Middleware、OWIN Pipeline等标签即可。


@oldman 如果这个答案有用,请将您的问题标记为已解决 ;) - Tanato

1

ASP.NET Core应用程序解剖学在asp.net core介绍中讨论。

以下是教程中回答您问题的一些重要文本:

ASP.NET Core应用程序只是一个控制台应用程序,在其主方法中创建Web服务器。Main使用遵循生成器模式的WebHostBuilder来创建Web应用程序主机。生成器具有定义Web服务器(例如UseKestrel)和启动类(UseStartup)的方法。在上面的示例中,使用了Kestrel Web服务器,但可以指定其他Web服务器。启动类是您定义请求处理管道以及配置应用程序所需的任何服务的位置。启动类必须是公共的,并包含以下方法:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
    }

    public void Configure(IApplicationBuilder app)
    {
    }
}

我想这会帮助你理解asp.net core如何处理Http请求。谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接