打开Visual Studio 2022。
选择“创建新项目”。
选择“ASP.NET Core Web API”模板,点击“下一步”。
输入项目名称(如OracleApi
),选择项目位置,点击“创建”。
使用NuGet管理包工具在项目中安装Oracle数据库的EF Core依赖:Oracle.EntityFrameworkCore
在项目中创建一个AppDbContext
类,用于连接和操作users
表。
AppDbContext.cs
代码:using Microsoft.EntityFrameworkCore;
namespace OracleApi
{
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions options) : base(options) { }
public DbSet Users{ get; set; } // 对应users表
}
}
创建实体类User
User.cs代码:
using System.ComponentModel.DataAnnotations.Schema;
namespace OracleApi
{
[Table("users")] // 显式指定表名
public class User
{
[Key] //指定主键为Id
public string Id{ get; set; } // 对应数据库中的 Id 字段
public string Name{ get; set; } // 对应数据库中的 Name 字段
}
}
在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 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}");
}
}
}
}
在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": "*"
}
在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(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();
}
}
}
创建一个简单的HTML页面,用于输入TEACHCODE
并调用服务端接口。
index.html
代码:
Teacher Query
Query Teacher by TEACHCODE
在Visual Studio中,选择“发布”选项,将项目发布为自包含的可执行文件。
选择目标框架(如net6.0
)和目标运行时(如win-x64
)。
选择发布目标路径,例如bin\Release\publish
。
点击“发布”。
安装Apache:确保Apache服务器已安装并运行。
安装mod_proxy
模块:确保mod_proxy
模块已启用。打开httpd.conf
文件,取消注释以下行:
apache复制
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
配置虚拟主机:在httpd.conf
文件中,添加以下虚拟主机配置:
ServerName localhost
DocumentRoot "C:/Apache24/htdocs"
ProxyPreserveHost On
ProxyPass /api/ http://localhost:5000/api/
ProxyPassReverse /api/ http://localhost:5000/api/
DocumentRoot
指向Apache的根目录。
ProxyPass
和ProxyPassReverse
将/api/
路径的请求转发到ASP.NET Core应用。
4. 保存并重启Apache
打开命令提示符或PowerShell。
导航到发布目录(如bin\Release\publish
)。
启动应用,命令行输入:
dotnet OracleApi.dll
将index.html
文件放在Apache的根目录(如C:\Apache24\htdocs
)。
确保Apache能够正常提供静态文件服务。
打开浏览器,访问http://localhost
。
输入用户Id
并点击“Query”按钮。
如果一切配置正确,页面将显示对应的用户信息。