当前位置: 首页 > news >正文

本地开发用ASP.NET Core Web API项目创建及测试

1. 服务端代码(C#)

1.1 创建ASP.NET Core Web API项目
  1. 打开Visual Studio 2022。

  2. 选择“创建新项目”。

  3. 选择“ASP.NET Core Web API”模板,点击“下一步”。

  4. 输入项目名称(如OracleApi),选择项目位置,点击“创建”。

1.2 安装Oracle数据库依赖

使用NuGet管理包工具在项目中安装Oracle数据库的EF Core依赖:Oracle.EntityFrameworkCore

1.3 配置数据库上下文

在项目中创建一个AppDbContext类,用于连接和操作users表。

AppDbContext.cs代码:
using Microsoft.EntityFrameworkCore;namespace OracleApi
{public class AppDbContext : DbContext{public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }public DbSet<User> Users{ get; set; }  // 对应users表}
}

创建实体类User

User.cs代码:

using System.ComponentModel.DataAnnotations.Schema;namespace OracleApi
{[Table("users")]  // 显式指定表名public class User{[Key]  //指定主键为Idpublic string Id{ get; set; }  // 对应数据库中的 Id 字段public string Name{ get; set; }  // 对应数据库中的 Name 字段}
}
1.4 创建控制器

Controllers文件夹中创建一个TeachersController类,用于处理按TEACHCODE查询TEACHERNAME的请求。

TeachersController.cs代码:
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq;
using System.Threading.Tasks;namespace OracleApi.Controllers
{[ApiController][Route("api/[controller]")]public class TeachersController : ControllerBase{private readonly AppDbContext _context;public TeachersController(AppDbContext context){_context = context;}[HttpGet("{Id}")]public async Task<IActionResult> GetTeacherName(string Id){try{var user = await _context.Users.Where(t => t.Id == Id).Select(t => new { t.Id, t.Name }).FirstOrDefaultAsync();if (user == null){return NotFound($"User with Id {Id} not found.");}return Ok(user);}catch (DbException ex){return StatusCode(500, $"Database error: {ex.Message}");}catch (Exception ex){return StatusCode(500, $"Internal server error: {ex.Message}");}}}
}
1.5 配置数据库连接

appsettings.json中添加Oracle数据库的连接字符串。假设你的Oracle数据库配置如下:

  • 用户名:your_username

  • 密码:your_password

  • 数据库服务器地址:your_oracle_server

  • 端口:1521

  • 服务名:your_service_name

appsettings.json代码:
{"ConnectionStrings": {"DefaultConnection": "User Id=your_username;Password=your_password;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=your_oracle_server)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=your_service_name)));Persist Security Info=True"},"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*"
}
1.6 配置依赖注入

Program.cs中配置数据库上下文和中间件。

Program.cs代码:

// 这段代码是 ASP.NET Core Web API 应用程序的入口点,它配置了应用程序的中间件、服务和数据库上下文。
using Microsoft.AspNetCore.HttpsPolicy; // 引入用于 HTTPS 策略的命名空间
using Microsoft.EntityFrameworkCore; // 引入 Entity Framework Core 命名空间,用于数据库操作
using Microsoft.Extensions.Options; // 引入用于配置选项的命名空间namespace WebApplication1 // 定义命名空间,通常是项目名称
{public class Program // 定义一个名为 Program 的类,作为应用程序的入口{public static void Main(string[] args) // 定义主方法,程序的入口点{// 创建一个 WebApplicationBuilder 实例,用于配置应用程序var builder = WebApplication.CreateBuilder(args);// 添加 CORS 配置// CORS(跨域资源共享)允许前端应用从不同的源(域名、协议或端口)发送请求builder.Services.AddCors(options =>{// 添加默认的 CORS 策略options.AddDefaultPolicy(policy =>{// 允许来自 http://localhost 的请求policy.WithOrigins("http://localhost").AllowAnyHeader() // 允许任何请求头.AllowAnyMethod(); // 允许任何 HTTP 方法(GET、POST 等)});// 可以定义多个 CORS 策略,并在需要时指定使用哪个策略options.AddPolicy("AllowLocalhost3000", policy =>{policy.WithOrigins("http://localhost:3000").AllowAnyHeader().AllowAnyMethod();});options.AddPolicy("AllowAll", policy =>{policy.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod();});});// 添加控制器支持builder.Services.AddControllers();// 添加数据库上下文服务builder.Services.AddDbContext<AppDbContext>(options =>// 配置数据库上下文使用 Oracle 数据库options.UseOracle(builder.Configuration.GetConnectionString("DefaultConnection")));// 构建应用程序实例var app = builder.Build();// 使用 CORS 中间件// 确保应用程序能够处理跨域请求。app.UseCors();  // 使用默认策略//app.UseCors("AllowLocalhost3000"); // 使用指定的策略// 使用授权中间件,用于处理用户授权逻辑。app.UseAuthorization();// 映射控制器路由,使得应用程序能够处理 HTTP 请求并调用相应的控制器方法。app.MapControllers();// 启动应用程序,开始监听 HTTP 请求。app.Run();}}
}

2. 客户端代码(JQuery)

2.1 创建HTML页面

创建一个简单的HTML页面,用于输入TEACHCODE并调用服务端接口。

index.html代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Teacher Query</title><script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
</head>
<body><h1>Query Teacher by TEACHCODE</h1><input type="text" id="userId" placeholder="Enter TEACHCODE" /><button id="queryButton">Query</button><div id="result"></div><script>$(document).ready(function () {$('#queryButton').click(function () {var userId= $('#userId').val();$.ajax({url: `http://localhost:5000/api/users/${userId}`, // 修改为你的API地址type: 'GET',success: function (data) {$('#result').html(`ID: ${data.Id}, Name: ${data.Name}`);},error: function (xhr, status, error) {$('#result').html(`Error: ${error}`);}});});});</script>
</body>
</html>

3. 部署到Windows上的Apache服务器

3.1 准备发布文件
  1. 在Visual Studio中,选择“发布”选项,将项目发布为自包含的可执行文件。

  2. 选择目标框架(如net6.0)和目标运行时(如win-x64)。

  3. 选择发布目标路径,例如bin\Release\publish

  4. 点击“发布”。

3.2 配置Apache
  1. 安装Apache:确保Apache服务器已安装并运行。

  2. 安装mod_proxy模块:确保mod_proxy模块已启用。打开httpd.conf文件,取消注释以下行:

    apache复制

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
  3. 配置虚拟主机:在httpd.conf文件中,添加以下虚拟主机配置:

  • <VirtualHost *:80>ServerName localhostDocumentRoot "C:/Apache24/htdocs"ProxyPreserveHost OnProxyPass /api/ http://localhost:5000/api/ProxyPassReverse /api/ http://localhost:5000/api/
    </VirtualHost>
  • DocumentRoot指向Apache的根目录。

  • ProxyPassProxyPassReverse/api/路径的请求转发到ASP.NET Core应用。

   4. 保存并重启Apache

3.3 启动ASP.NET Core应用
  1. 打开命令提示符或PowerShell。

  2. 导航到发布目录(如bin\Release\publish)。

  3. 启动应用,命令行输入:

    dotnet OracleApi.dll

3.4 将客户端代码放在Apache根目录
  1. index.html文件放在Apache的根目录(如C:\Apache24\htdocs)。

  2. 确保Apache能够正常提供静态文件服务。

4. 测试

  1. 打开浏览器,访问http://localhost

  2. 输入用户Id 并点击“Query”按钮。

  3. 如果一切配置正确,页面将显示对应的用户信息。

http://www.lryc.cn/news/542569.html

相关文章:

  • Redis——用户签到BitMap,UV统计
  • 一文详解U盘启动UEFI/Legacy方式以及GPT/MBR关系
  • Unity Shader 学习13:屏幕后处理 - 使用高斯模糊的Bloom辉光效果
  • 小迪安全-24天-文件管理,显示上传,黑白名单,访问控制
  • java23种设计模式-建造者模式
  • JMeter 中实现 100 个用户在 3 秒内并发登录
  • SOME/IP-SD -- 协议英文原文讲解2
  • IntelliJ IDEA中Maven配置全指南
  • 第438场周赛:判断操作后字符串中的数字是否相等、提取至多 K 个元素的最大总和、判断操作后字符串中的数字是否相等 Ⅱ、正方形上的点之间的最大距离
  • 20-R 绘图 - 饼图
  • 【LLM】R1复现项目(SimpleRL、OpenR1、LogitRL、TinyZero)持续更新
  • Linux 内核网络设备驱动编程:私有协议支持
  • 20241130 RocketMQ本机安装与SpringBoot整合
  • FFmpeg进化论:从av_register_all手动注册到编译期自动加载的技术跃迁
  • Http升级为Https - 开发/测试服环境
  • C语言预编译
  • 算法刷题-字符串-151.反转单词
  • 单片机裸机编程:状态机与其他高效编程框架
  • 图表控件Aspose.Diagram入门教程:使用 Python 将 VSDX 转换为 PDF
  • DPVS-1:编译安装DPVS (ubuntu22.04)
  • 即将发布书籍 - Yocto项目实战教程:高效定制嵌入式Linux系统
  • Git 常用指令及其说明
  • nginx代理后502
  • 大模型WebUI:Gradio全解12——LangChain原理及其agent构建Gradio(1)
  • 【Unity】鱼群效果模拟
  • PHP入门基础学习五(函数1)
  • 微信小程序 - 页面跳转(wx.navigateTo、wx.redirectTo、wx.switchTab、wx.reLaunch)
  • Typora的Github主题美化
  • 2.3 变量
  • Docker:Docker从入门到精通(一)- Docker简介