找回密码
 会员注册
查看: 147|回复: 0

从零开始学习 asp.net core 3.1 web api 后端api基础框架(二)-创建项目

[复制链接]

1389

主题

5

回帖

496万

积分

管理员

积分
4962992
发表于 2024-2-29 08:15:38 | 显示全部楼层 |阅读模式

目录

一、创建项目

1.选择【文件】→【新建】→【项目】

2.创建【ASP.NET Core Web 应用程序】,点击 下一步

3.项目名称为CoreBackend.Api,点击 创建

4.选【ASP.NET Core 3.1】、【空】 点击 创建

5.打开Program.cs,安装包“Microsoft.Extensions.Hosting.Abstractions”,查找并安装最新版本

二.解读项目

1. 解读项目生成的代码 Program.cs

2. 解读项目生成的代码 Startup.cs

三、注册并使用Controllers


一、创建项目

1.选择【文件】→【新建】→【项目】

2.创建【ASP.NET Core Web 应用程序】,点击 下一步

3.项目名称为CoreBackend.Api,点击 创建

4.选【ASP.NET Core 3.1】、【空】 点击 创建

5.打开Program.cs,安装包“Microsoft.Extensions.Hosting.Abstractions”,查找并安装最新版本

二.解读项目

1. 解读项目生成的代码 Program.cs

这个Program是程序的入口, 看起来很眼熟, 是因为Asp.Net Core Application实际就是控制台程序(Console Application).
它是一个调用Asp.Net Core 相关库的Console Application。

Main方法是整个项目的入口方法。这里Main只有一行代码,但是实际上执行了三个函数:
1、IHostBuilder builder= CreateHostBuilder(args);
2、IHost host=builder.Build;
3、host.Run;

1、通过CreateHostBuilder(args)方法产生一个IhostBuilder的实例builder。
2、通过builder.Build方法产生一个Ihost的实例host。
3、通过host.Run方法,开始运行Web项目,这时候就可以响应各种请求了。

创建并配置主机:为了方便阅读,把这个Lamada表达式还原下:

1、使用预配置默认值初始化HostBuilder类的新实例builder。(读取appsettings.json)

2、webBuilder.UseStartup();读取startup类配置信息。

3、通过builder.ConfigureWebHostDefaults(Action )方法将IHostBuilder实例转变为一个Web主机性质的webbuilder(IWebHostBuilder)。

 

Asp.Net Core 自带了两种http servers, 一个是WebListener, 它只能用于Windows系统, 另一个是Kestrel, 它是跨平台的。
Kestrel是默认的Web Server, 就是通过UseKestrel()这个方法来启用的。
但是我们开发的时候使用的是IIS Express, 调用UseIISIntegration()这个方法是启用IIS Express, 它作为Kestrel的Reverse Proxy Server(反向代理)来用。
如果在Windows服务器上部署的话, 就应该使用IIS作为Kestrel的反向代理服务器来管理和代理请求。
如果在Linux上的话, 可以使用Apache, Nginx等等的作为Kestrel的Proxy Server。
当然也可以单独使用Kestrel作为Web 服务器, 但是使用IIS作为Reverse Proxy还是由很多有点的: 例如,IIS可以过滤请求, 管理证书, 程序崩溃时自动重启等。

2. 解读项目生成的代码 Startup.cs

其实Startup算是程序真正的切入点。

ConfigureServices方法是用来把services(各种服务, 例如identity, ef, mvc等等包括第三方的, 或者自己写的)加入(register)到container(asp.net core的容器)中去, 并配置这些services. 这个container是用来进行dependency injection的(依赖注入). 所有注入的services(此外还包括一些框架已经注册好的services) 在以后写代码的时候, 都可以将它们注入(inject)进去。例如上面的Configure方法的参数, app, env都是注入进去的services。

Configure方法是asp.net core程序用来具体指定如何处理每个http请求的, 例如我们可以让这个程序知道我使用mvc来处理http请求, 那就调用app.UseMvc()这个方法就行。 但是目前, 所有的http请求都会导致返回"Hello World!".

这几个方法的调用顺序: Main -> ConfigureServices -> Configure

请求管道和中间件(Request Pipeline, Middleware)

请求管道: 那些处理http requests并返回responses的代码就组成了request pipeline(请求管道).
中间件: 我们可以做的就是使用一些程序来配置那些请求管道 request pipeline以便处理requests和responses. 比如处理验证(authentication)的程序, 连MVC本身就是个中间件(middleware).

image

每层中间件接到请求后都可以直接返回或者调用下一个中间件. 一个比较好的例子就是: 在第一层调用authentication验证中间件, 如果验证失败, 那么直接返回一个表示请求未授权的response。

在上面【图 Startup.cs】中,app.UseDeveloperExceptionPage(); 就是一个middleware, 当exception发生的时候, 这段程序就会处理它. 而判断env.isDevelopment() 表示, 这个middleware只会在Development环境下被调用。
可以在项目的属性Debug页看到这个设置: 


需要注意的是这个环境变量Development和VS里面的Debug Build没有任何关系。

在正式环境中, 我们遇到exception的时候, 需要捕获并把它记录(log)下来, 这时候我们应该使用这个middleware: Exception Handler Middleware, 我们可以这样调用它:

  1. if (env.IsDevelopment())
  2. {
  3. app.UseDeveloperExceptionPage();
  4. }
  5. else
  6. {
  7. app.UseExceptionHandler();
  8. }
复制代码


UseExceptionHandler是可以传参数的, 但暂时先这样, 我们在app.Run方法里抛一个异常, 然后运行程序, 在Chrome里按F12就会发现有一个(或若干个, 多少次请求, 就有多少个错误)500错误。

三、注册并使用Controllers

services.AddControllers(); //添加对控制器和与 API 相关的功能,但不是视图或页面的支持。
services.AddControllersWithViews(); //添加对控制器、 与 API 相关的功能,和视图,但不是页面的支持。
services.AddRazorPages(); //添加支持 Razor 页面和最小控制器支持。

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddControllers(); // 注册Controllers到Container
  4. }
复制代码

由于路由现在包括对不止是 MVC 的支持,已更改了术语进行明确说明他们所做的这些方法。 
MapControllers 添加了对属性路由的控制器支持。
MapAreaControllerRoute 将控制器的传统路由添加区域。
MapControllerRoute 添加控制器的常规路由。

我们这儿添加MapControllers :

  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  2. {
  3. if (env.IsDevelopment())
  4. {
  5. app.UseDeveloperExceptionPage();
  6. }
  7. app.UseRouting();
  8. app.UseAuthorization();
  9. app.UseEndpoints(endpoints =>
  10. {
  11. endpoints.MapControllers();
  12. });
  13. }
复制代码


跑一下, 试试效果:
Chrome显示了一个错误页, 显示了404 Not Found错误。


这是因为我只添加了Controllers middleware, 但是它啥也没做, 也没有找到任何可用于处理请求的代码, 所以我们要添加Controller来返回数据/资源等等。


来源:https://blog.csdn.net/kingyumao/article/details/81532745
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?会员注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 00:06 , Processed in 1.496246 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表