发布于2026-07-23 阅读(0)
扫一扫,手机访问
学新不学旧,这个道理放在技术选型上同样适用。.Net Core作为开源框架,正在逐步替代传统的.Net Framework,至于能用在什么地方,懂的都懂。下面就来完整走一遍.Net8框架下Web API项目的创建、开发到部署全流程。
新建项目时,直接选择“ASP.NET Core Web API”模板。如果模板列表太多,可以在上方的筛选框里快速定位。
要是找不到这个模板,说明VS Installer里缺了“ASP.NET和Web开发”模块,得去补装一下。


配置项目
配置HTTPS:为了方便本地测试,可以不勾选。
不使用顶级语句:勾选后会生成传统的Program类,里面是Main函数入口;不勾选的话,代码直接写在顶层,有点抽象,不太符合C#的习惯。选哪个看个人喜好。
使用控制器:建议勾选。如果不勾选,所有方法都得写在Program里,看着就乱。

项目结构

先来看Main函数里的配置,这里藏着不少关键逻辑:
namespace WebAPI记录{ public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); //注入swagger // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); //生成文档 builder.Services.AddSwaggerGen(); //设置文档内容 var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) //只有当程序处于debug的情况才开启swagger { //分别注入中间件和ui中间间 app.UseSwagger(); app.UseSwaggerUI(); } app.UseAuthorization(); app.MapControllers(); app.Run(); } }}
Controller的部分,可以理解为API的“大脑”:
using Microsoft.AspNetCore.Mvc;namespace WebAPI记录.Controllers{ [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger _logger; public WeatherForecastController(ILogger logger) { _logger = logger; }// http://ip:port/WeatherForecast [HttpGet(Name = "GetWeatherForecast")]// 创建Get请求 public IEnumerable Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } }}
另外,LaunchSettings.json这个配置文件里记录了端口等关键信息,值得留意:
{ "$schema": "http://json.schemastore.org/launchsettings.json", "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:12692", "sslPort": 0 } }, "profiles": { "http": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", "applicationUrl": "http://localhost:5053", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "launchUrl": "swagger", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } }}
运行方式可以选择http或者IIS,端口号就看上面json里的配置。

运行效果
Debug模式下会自动打开Swagger页面(这也是Main函数里设置的效果),可以直观地看到所有接口,测试起来很方便。


轻点Execute,就能看到完整的请求URL和返回结果。

本地测试到这里就差不多了。
菜单栏选择“生成” -> “发布”。目标选“文件夹”就行,简单直接。

默认路径是项目文件夹下的publish目录。

点击“发布”开始编译。


生成成功后,可以直接到目录下查看。

部署环境:Window Server 2016
这一步比较简单,常规操作:服务器管理器 -> 添加功能 -> 安装IIS。具体细节就不展开了。
去微软官网下载“.NET 8.0运行时”,选择Host Bundle包就行。

安装完成后,右键找到IIS管理器。

在“模块”下看到AspNetCoreModuleV2,说明安装成功。


先添加一个应用程序池。

输入名称,然后选择“无托管代码”。

把上一步发布生成的文件夹传到服务器上(过程略)。然后在IIS里添加网站:
应用程序池:选择刚才创建的
物理路径:选择刚才上传的文件夹
端口:选择一个空端口(注意,这个端口不用和项目里的LaunchSettings.json配置一致)

编辑权限,创建一个完全控制权限的账户。

点击“启动”运行,发现页面是空的?别急,做的是API而不是网站,把地址换成具体的接口URL就能看到结果了。


用Postman远程测试,一切正常。

在Controllers文件夹下添加一个控制器。


命名时记得以Controller结尾。

创建后,代码会自动继承Controller基类。其中[Route("[controller]")]表示URL默认以类名(比如MyAPI)作为路由地址。如果想用其他路径,直接改字符串就行。
下面列举了4种常见的请求方式,完整的增删改查骨架已经有了:
using Microsoft.AspNetCore.Mvc;namespace WebAPI记录.Controllers{ [ApiController] [Route("[controller]")] public class MyAPIController : Controller { // http://ip:port [HttpGet] public string GetString() { return "Hello"; } // http://ip:port/myapi/id [HttpGet("id")] public string GetStringByID([FromHeader]int id) // FromHeader属性表示从请求头获得参数 { return "Hello " + id.ToString(); } // http://ip:port/myapi/result [HttpGet("result")] public IActionResult GetStringResult() { var data = new { Message = "Hello" }; return Ok(data); // Ok返回包含请求数据的HTTP 200 } // http://ip:port/postdata [HttpPost("postdata")] public IActionResult PostData([FromBody] DataModel data) // FromBody属性表示从请求的Body中读取并转为DataModel类 { // 在这里处理接收到的数据 return CreatedAtAction(nameof(PostData), null, new { Message = data }); // CreatedAtAction返回包含创建资源的 URL 的 HTTP 201 响应 } }}
对应的DataModel类:
namespace WebAPI记录{ public class DataModel { public string Name { get; set; } public int Value { get; set; } }}
运行后,这些接口已经可以正常访问了。

测试结果如下:


售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8