.Net8 WebAPI项目创建部署记录

SmileGift 2024-10-15 12:03:01 阅读 99

.Net8 WebAPI项目创建部署记录

本着学新不学旧的原则,.Net Core会逐步替代.Net Framework,并且是开源框架,能用在什么地方懂的都懂。本文记录了Net8框架下的Web API项目创建到部署过程。

1、创建项目

新建项目选择ASP.NET Core Web API,太多了的话可以在上面筛选

如果没有去VS Installer添加“ASP.NET 和 Web开发”模块并安装。

安装

创建项目

配置项目

<code>配置HTTPS:方便测试不勾选。

不使用顶级语句:勾选后是传统的Program类中定义Main函数入口;不勾选直接就是指令有点抽象不符合C#习惯,够不够选看个人。

使用控制器:不勾选会在Program中写方法,看着乱,建议勾选。

项目配置

2、项目结构和解释

项目结构

项目结构

Main函数配置解释:

<code>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解释:

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<WeatherForecastController> _logger;

public WeatherForecastController(ILogger<WeatherForecastController> logger)

{

_logger = logger;

}

// http://ip:port/WeatherForecast

[HttpGet(Name = "GetWeatherForecast")]// 创建Get请求

public IEnumerable<WeatherForecast> 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();

}

}

}

.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"

}

}

}

}

3、本地运行

可以选择http或者IIS方式运行,端口见上面json内的配置

运行方式

运行效果

Debug模式下会进入Swagger页面(见上面Main函数注释),以UI形式方便观察测试接口和结果

Swagger

Swagger

点击Execute查看请求URL和返回结果

本地测试

至此本地测试完成

4、生成项目

选择菜单栏中的 生成 -> 发布。

目标可以选文件夹,简单一点

发布

默认路径是生成文件夹下的publish目录

发布

点击发布编译生成项目

发布

编译

生成成功后可以直接到生成目录下:

生成

5、服务器远程部署(Windows)

部署环境:Window Server 2016

(1)安装IIS

这边简单写了,详细自行查询

服务器管理器 -> 添加功能 -> 安装IIS

(2)安装NetCore运行时

进入微软官网下载运行时Download .NET 8.0 (Linux, macOS, and Windows),选择HostBundle包即可。

NETCore

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

IIS

在模块下出现AspNetCoreModuleV2表示安装成功:

在这里插入图片描述

在这里插入图片描述

(3)配置IIS

添加应用程序池:

应用程序池

输入名称,选择”无托管代码“:

应用程序池

<code>将发布生成的文件夹传到服务器上去,过程略。

IIS添加网站:

应用程序池选择刚才创建的

物理路径选择刚才上传的文件夹

绑定的端口选择空端口(不用和项目中json配置的一样)

添加网站

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

创建用户权限

点击”启动“运行,发现什么都没有。别忘记我们做的是API不是网站,地址换成接口URL就有了

测试结果

测试结果

Postman远程测试也没有问题:

POSTMAN测试

6、新增自定义接口

Controllers文件夹添加控制器

新增控制器

新增控制器

命名方式注意以Controller结尾

新增控制器

创建好后代码自动继承Controller。

<code>[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; }

}

}

运行后已经可以访问结果了

运行结果

测试结果:

测试结果

测试结果

测试结果



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。