ASP .Net Core的本质是一个在服务器上的控制台程序,所有的活动都由一个Main方法负责
Starup类用于配置管道和服务,必须为public,包含ConfigureServices和Configure两个方法
ConfigureServices用来注册服务(除了系统注册好的服务),Configure用来对HTTP请求作出响应,功能类似于C语言中的Main函数
.net core中有几个重要的概念:服务、中间件、管道,服务就好像Socket中的监听,用来获取各种HTTP请求;中间件类似于传统.net编程中的Method;管道则是各个method之间的逻辑,由SOLID原则,每个中间件只负责很小的职责范围所以他们之间的逻辑顺序至关重要,可以用一张图来展示他们之间的关系
ASP .net Core通过以下几种方式来响应HTTP请求
一、注册服务
重点是注册自己的服务
在Configure的参数中添加自己服务(IWelComeService)
public void Configure(IApplicationBuilder app, IHostingEnvironment env,IWelComeService ObjX)
此时服务还为被注册暂时处于无法使用的状态,我们Ctr+"."快速建立接口文件并且完善接口类和实现类
public interface IWelComeService
{
string GetMessage();
}
public class WelComeService : IWelComeService
{
public string GetMessage()
{
return "Hello From I WelcomeService!";
}
}
并且在app.run中添加实现方法
app.Run(async (context) =>
{
var welcome = ObjX.GetMessage();
await context.Response.WriteAsync(welcome+"\r\n");
});
接下来注册服务,在ConfigureServices中使用以下几种方法均可注册服务
services.AddSingleton<IWelComeService, WelComeService>();//单例模式--项目中之多出现一个同名服务--注入依赖
//AddTransient会覆盖之前的服务
//AddScoped在未被销毁前会一直使用同名服务
注意,这个是一个默认方法,在没有其他映射的前提下所有访问都由它处理,所以其位置应该位于其他处理方法之后
二、使用app.Use
app.Use(next =>{return async HttpContext =>
{
if (HttpContext.Request.Path.StartsWithSegments("/first"))
{
await HttpContext.Response.WriteAsync("First!!!");
}
else
{
await next(HttpContext);
}
};
});
三、使用默认页面
app.UseWelcomePage(new WelcomePageOptions
{
Path = "/welcome"//用于路径配置http://locahost/welcome
});//启动欢迎页
四、使用静态文件
静态文件指图片,HTML网页等会在访问时直接提供给用户的文件,这里以HTML网页为例,在项目中新建一个HTML页面并随意在<Body>中添加一些字符串(PS.HTML文件应该置于wwwroot文件夹下)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<h1>Hello From Index.HTML</h1>
</body>
</html>
在Configure中使用
app.UseDefaultFiles();//默认请求页面
app.UseStaticFiles();//伺服静态文件
//或者下面这个//
app.UseFileServer();
IHostingEnvironment包含了环境配置,可以通过调用 IHostingEnvironment env中的对象来获取运行环境相关的数据
if (env.IsDevelopment())//显示错误信息--只在开发环境下使用
{
app.UseDeveloperExceptionPage();
}
是错误显示页面,会提供错误的详细信息,在发布阶段应当被禁用