好吧,我现在正在学习aspnet核心,我无法理解应用程序何时启动其服务器(如IIS或KestrelServer),以及服务器如何监听httprequest并将请求转发给应用程序。有谁能够帮我?感谢
答案 0 :(得分:3)
好吧,让我们从头开始(因为我无法弄清楚你对C#的了解)
每个C#应用程序必须包含一个Main方法,指定程序执行的开始位置,因此,默认情况下,模板具有类Program
,您可以在其中设置要使用的WebServer类型,并告诉服务器开始侦听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的OWIN实现)。
OWIN表示一个接口(只是一个规范),它告诉WebServers应该如何与WebApplications通信。通常它会将Http请求处理为可以插入中间件的管道,例如身份验证/授权,日志,错误处理等等,在管道的末尾,您应该插入Web应用程序。
在AspNetCore中,您可以在主机配置中使用UseStartup<MyStartupClass>
设置中间件管道,请参阅上面的Main
方法,并且简单,因为您的管道将处理每个HttpRequest。
在AspNetCore(.UseMvc()
)中构建MVC应用程序时,您正在设置一个中间件,告诉您的应用程序查找从Microsoft.AspNetCore.Mvc.Controller
继承的类以查找RESTful入口点(HTTP GET,POST。 ..)
这只是一个简单的概述,您可以在这些技术的文档中学习更多内容。只需搜索Katana,vNext,OWIN,OWIN Middleware,OWIN Pipeline等标签......
答案 1 :(得分:1)
ASP.NET核心应用程序解剖在此处asp.net core introduction进行了讨论。
回答您问题的一些重要文本如下教程:
ASP.NET Core应用程序只是一个控制台应用程序,可在其Main方法中创建Web服务器。 Main使用WebHostBuilder(遵循构建器模式)来创建Web应用程序主机。构建器具有定义Web服务器(例如UseKestrel)和启动类(UseStartup)的方法。在上面的示例中,使用了Kestrel Web服务器,但可以指定其他Web服务器。您可以在Startup类中定义请求处理管道以及配置应用程序所需的任何服务的位置。 Startup类必须是公共的,并包含以下方法:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app)
{
}
}
我想这可以帮助你理解asp.net核心如何处理Http请求。 感谢