Asp.netCore3.0 WebApi从0到1手摸手教你写【
2019-10-14 本文已影响0人
我是Mr小赵先生
开发环境
Visual Studio 2019
.net core 3.0
打开vs2019新建项目
具体步骤如下图:
![](https://img.haomeiwen.com/i1401162/4e7cff85bbdc96aa.png)
![](https://img.haomeiwen.com/i1401162/91b6fe0c32e3addc.png)
![](https://img.haomeiwen.com/i1401162/8ccc23fce3312ac4.png)
此处我们选择API(新手不推荐选择空项目,选择API系统会为我们自动创建WebApi需要的一些配置文件等),Https配置这一项我们暂时不勾选,目前我们不配置Https。
![](https://img.haomeiwen.com/i1401162/acb6a05ed13b6c5b.png)
点创建以后的界面如下图:
![](https://img.haomeiwen.com/i1401162/8571eecd93523b2d.png)
运行项目
F5运行项目,然后就可以看到微软为我们写好的一个天气预报示例webapi了,这里只有一个Get请求示例,返回值为json格式。
![](https://img.haomeiwen.com/i1401162/faf6b21a774a4cb2.png)
Startup.cs说明
注意:services.AddControllers();
和 endpoints.MapControllers();
方法成对出现, 这是.net core3.0中的最新写法
ConfigureServices方法
用来向容器中注册服务,注册好的服务可以在其他地方进行调用.
Configure方法
用来配置中间件管道,即如何响应http请求.
![](https://img.haomeiwen.com/i1401162/347fe9d2583fa865.png)
创建第一个Controller
1 右键删除系统默认创建的WeatherForecastController.cs
和WeatherForecast.cs
2 新建一个控制器,命名:UserController.cs
![](https://img.haomeiwen.com/i1401162/06e39f6933fb7b3a.png)
![](https://img.haomeiwen.com/i1401162/f34860a265403e7c.png)
![](https://img.haomeiwen.com/i1401162/d408bbd00c60b33c.png)
新建以后如下图:
![](https://img.haomeiwen.com/i1401162/6feb0a612ff27875.png)
注:我们打开项目依赖项,可以看到系统默认给我们增加了
EntiyFrameworkCore
的引用,由此就可以看出微软也在大力推广EF的使用了。![](https://img.haomeiwen.com/i1401162/11f1e200afdb80b6.png)
回归正题,我们在
UserController
中增加一个Login
的get
方式的接口方法,返回一个hello
,我们打算通过请求api/User/Login
来得到这个hello
,F5运行程序
namespace XXX.api.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class UserController : ControllerBase
{
[HttpGet]
public IActionResult Login()
{
return Ok("hello");
}
}
}
问题来了,为啥直接给打开weatherforecast
,而且还404了,别急,往下看。
![](https://img.haomeiwen.com/i1401162/c727e4479e7ad662.png)
在项目
Properties
中打开launchsettings.json
。![](https://img.haomeiwen.com/i1401162/4207c1c276e7730c.png)
修改
launchsettings.json
,我们删掉了关于IIS相关的内容(让webapi不通过IIS来加载),然后修改了lauchUrl
属性,如下:
{
"profiles": {
"XXX.api": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/User/Login",
"applicationUrl": "http://localhost:5000/",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
(┬_┬)怎么还是404?别急继续往下看
![](https://img.haomeiwen.com/i1401162/01ce3ebff28d7381.png)
因为我们是要通过
api/User/Login
来得到这个hello
,所以我们要在UserController
里定义一个action
的动作,这样才能通过api/User/Login
来得到这个hello
,如下图新增action
![](https://img.haomeiwen.com/i1401162/a5d0e03a6a9b1b56.png)
F5运行结果如下:
![](https://img.haomeiwen.com/i1401162/30cd16811258215c.png)
增加全局路由
上面增加action
虽然能达到想要的结果,但是每次新建一个Controller
都有写个action
万一要是忘记了又要忙乎半天,有没有一劳永逸的办法呢?
继续往下看:
1.首先去掉Controller里的Route
和ApiController
![](https://img.haomeiwen.com/i1401162/b7ec30db6fa82eb7.png)
2.修改Startup.cs
,增加路由模版:
![](https://img.haomeiwen.com/i1401162/a61a13437b28b783.png)
感觉每次还是删除两段代码还是有点麻烦,虽然麻烦,但是用全局路由可以方便后期更改,万一老板不想通过api/xxx/xxx的方式来访问接口,想通过api2/xxx/xxx的方式访问,此时你只需要修改下
Startup.cs
即可。
今天就到这里,后期继续完善我们的webapi。