当前位置: 首页 > 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. 如果一切配置正确,页面将显示对应的用户信息。

相关文章:

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

1. 服务端代码&#xff08;C#&#xff09; 1.1 创建ASP.NET Core Web API项目 打开Visual Studio 2022。 选择“创建新项目”。 选择“ASP.NET Core Web API”模板&#xff0c;点击“下一步”。 输入项目名称&#xff08;如OracleApi&#xff09;&#xff0c;选择项目位置&…...

Redis——用户签到BitMap,UV统计

目录 BitMap 使用场景 1. 用户签到系统 2. 用户行为标记 3. 布隆过滤器&#xff08;Bloom Filter&#xff09; BitMap介绍 Redis中的使用 Redis功能示例 添加&#xff1a; 获取&#xff1a; 批量获取&#xff1a; java中实现 统计本月连续签到次数 UV统计 UV 统计…...

一文详解U盘启动UEFI/Legacy方式以及GPT/MBR关系

对于装系统的老手而说一直想研究一下装系统的原理&#xff0c;以及面对一些问题时的解决思路&#xff0c;故对以前的方法进行原理上的解释&#xff0c;主要想理解其底层原理。 引导模式 MBR分区可以同时支持UEFI和Legacy引导&#xff0c;我们可以看一下微pe制作的启动盘&#…...

Unity Shader 学习13:屏幕后处理 - 使用高斯模糊的Bloom辉光效果

目录 一、基本的后处理流程 - 以将画面转化为灰度图为例 1. C#调用shader 2. Shader实现效果 二、Bloom辉光效果 1. 主要变量 2. Shader效果 &#xff08;1&#xff09;提取较亮区域 - pass1 &#xff08;2&#xff09;高斯模糊 - pass2&3 &#xff08;3&#xff…...

小迪安全-24天-文件管理,显示上传,黑白名单,访问控制

上节课回顾&#xff0c;token问题 没有更新token值&#xff0c;造成了复用 加上这段代码就好了&#xff0c;就不会复用了 文件管理-文件上传 upload.html文件&#xff0c;找ai生成就行 uoload.php接受文件上传的信息 这里在写个临时文件存储换个地方 因为上面临时文件存在c盘…...

java23种设计模式-建造者模式

建造者模式&#xff08;Builder Pattern&#xff09;学习笔记 1. 模式定义 建造者模式是一种创建型设计模式&#xff0c;通过分步构建复杂对象的方式&#xff0c;将对象的构建过程与表示分离。允许使用相同的构建过程创建不同的对象表示。 2. 适用场景 ✅ 需要创建包含多个…...

JMeter 中实现 100 个用户在 3 秒内并发登录

在 JMeter 中实现 100 个用户在 3 秒内并发登录,需要合理配置线程组、定时器和测试逻辑。以下是具体步骤: 1. 创建测试计划 打开 JMeter。右键点击“Test Plan”,选择 Add > Threads (Users) > Thread Group。 : 设置为 100(模拟 100 个用户)。 : 设置为 3...

SOME/IP-SD -- 协议英文原文讲解2

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.2 S…...

IntelliJ IDEA中Maven配置全指南

一、环境准备与基础配置 1.1 Windows 环境下载并配置 Maven 见此篇博文&#xff1a;环境配置 1.2 IDEA配置步骤 打开设置面板&#xff1a;File → Settings → Build → Build Tools → Maven 关键配置项&#xff1a; Maven home path E:\apache-maven-3.9.9 &#xff08;…...

第438场周赛:判断操作后字符串中的数字是否相等、提取至多 K 个元素的最大总和、判断操作后字符串中的数字是否相等 Ⅱ、正方形上的点之间的最大距离

Q1、判断操作后字符串中的数字是否相等 1、题目描述 给你一个由数字组成的字符串 s 。重复执行以下操作&#xff0c;直到字符串恰好包含 两个 数字&#xff1a; 从第一个数字开始&#xff0c;对于 s 中的每一对连续数字&#xff0c;计算这两个数字的和 模 10。用计算得到的新…...

20-R 绘图 - 饼图

R 绘图 - 饼图 R 语言提供来大量的库来实现绘图功能。 饼图&#xff0c;或称饼状图&#xff0c;是一个划分为几个扇形的圆形统计图表&#xff0c;用于描述量、频率或百分比之间的相对关系。 R 语言使用 pie() 函数来实现饼图&#xff0c;语法格式如下&#xff1a; pie(x, l…...

【LLM】R1复现项目(SimpleRL、OpenR1、LogitRL、TinyZero)持续更新

note &#xff08;1&#xff09;未来的工作需亟待解决&#xff1a; 支持大规模 RL 训练&#xff08;PPO、GRPO 等&#xff09;的开源基础框架用于稳定训练的 GRPO 训练超参的自动化调优RL 训练数据的配比&#xff08;难度、领域、任务等&#xff09;基于 Instruct 模型训练 R…...

Linux 内核网络设备驱动编程:私有协议支持

一、struct net_device的通用性与私有协议的使用 struct net_device是Linux内核中用于描述网络设备的核心数据结构,它不仅限于TCP/IP协议,还可以用于支持各种类型的网络协议,包括私有协议。其原因如下: 协议无关性:struct net_device的设计是通用的,它本身并不依赖于任何…...

20241130 RocketMQ本机安装与SpringBoot整合

目录 一、RocketMQ简介 ???1.1、核心概念 ???1.2、应用场景 ???1.3、架构设计 2、RocketMQ Server安装 3、RocketMQ可视化控制台安装与使用 4、SpringBoot整合RocketMQ实现消息发送和接收? ? ? ? ? 4.1、添加maven依赖 ???4.2、yaml配置 ???4.3、…...

FFmpeg进化论:从av_register_all手动注册到编译期自动加载的技术跃迁

介绍 音视频开发都知道 FFmpeg,因此对 av_register_all 这个 API 都很熟悉,但ffmpeg 4.0 版本开始就已经废弃了,是旧版本中用于全局初始化的重要接口。 基本功能 核心作用:av_register_all() 用于注册所有封装器(muxer)、解封装器(demuxer)和协议处理器(protocol),…...

Http升级为Https - 开发/测试服环境

1.应用场景 主要用于开发/测试服环境将http升级为https, 防止前端web(浏览器)出现Mixed Content报错; 2.学习/操作 1.文档阅读 deepseek 问答; 2.整理输出 报错信息: Mixed Content: The page at <URL> was loaded over HTTPS, but requested an insecure XMLHttpRequ…...

C语言预编译

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一、预处理的作用与流程&#xf…...

算法刷题-字符串-151.反转单词

题目 给一串字符串&#xff0c;里面有若干单词&#xff0c;以空格界定单词的结束&#xff0c;翻转其中的单词 输入&#xff1a;s " hello world " 输出&#xff1a;“world hello” 需要注意的是&#xff0c;给定的字符串可能存在头空格、尾空格以及中间的空格数量…...

单片机裸机编程:状态机与其他高效编程框架

在单片机裸机编程中&#xff0c;状态机是一种非常强大的工具&#xff0c;能够有效管理复杂的逻辑和任务切换。除了状态机&#xff0c;还有其他几种编程模式可以在不使用 RTOS 的情况下实现高效的程序设计。以下是一些常见的方法&#xff1a; 1. 状态机编程 状态机通过定义系统…...

图表控件Aspose.Diagram入门教程:使用 Python 将 VSDX 转换为 PDF

将VSDX转换为PDF可让用户轻松共享图表。PDF 文件保留原始文档的布局和设计。它们广泛用于演示文稿、报告和文档。在这篇博文中&#xff0c;我们将探讨如何在 Python 中将 VSDX 转换为 PDF。 本文涵盖以下主题&#xff1a; Python VSDX 到 PDF 转换器库使用 Python 将 VSDX 转…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...