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

news/2025/2/25 9:29:59

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]  //指定主键为Id
        public 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 localhost
        DocumentRoot "C:/Apache24/htdocs"
    
        ProxyPreserveHost On
        ProxyPass /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.niftyadmin.cn/n/5865323.html

相关文章

AI赋能游戏前端:效率革命与沉浸式体验的未来

游戏行业正经历一场深刻的变革&#xff0c;玩家对游戏体验的要求越来越高&#xff0c;追求更逼真、更沉浸式的游戏世界。为了满足玩家日益增长的需求&#xff0c;游戏开发者们需要不断提升开发效率和品质。而AI写代码工具的出现&#xff0c;正为游戏前端开发带来一场效率革命&a…

stm32-电源控制

STM32 的 PWR&#xff08;Power Control&#xff09;外设 是用于管理微控制器电源模式和外设电源控制的模块。通过 PWR 外设&#xff0c;可以实现低功耗模式、电压调节、备份域控制等功能&#xff0c;从而优化系统的功耗和性能。 stm32内部电源框图 电源区域 VDD 供电区&#x…

【UDS】s19文件解析

s19文件解析 1. 什么是 S192. S19 格式2.1 s19 记录类型定义2.2 CRC校验3. S19 解析举例4. S19 解析在项目中的运用1. 什么是 S19 S19(S-Record) 文件是一种广泛应用于嵌入式系统开发中的文件格式,摩托罗拉于1970s发明,主要用于存储程序的可执行代码和相关数据。它以文本格…

LabVIEW电能质量分析软件

随着电力系统的复杂性增加&#xff0c;电能质量问题日益突出&#xff0c;传统的电能质量检测装置多采用DSP技术&#xff0c;不仅开发周期长、功能单一&#xff0c;而且在多功能集成方面存在局限性。基于LabVIEW虚拟仪器开发平台的电能质量分析软件利用FFT、STFT、WT、HHT等多种…

Kubernetes控制平面组件:API Server Node 授权机制 详解

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…

Dashboard-frps

通过浏览器查看 frp的状态以及代理统计信息展示。 注&#xff1a;Dashboard 尚未针对大量的 proxy 数据展示做优化&#xff0c;如果出现 Dashboard 访问较慢的情况&#xff0c;请不要启用此功能。 需要在 frps.ini中指定 dashboard服务使用的端口&#xff0c;即可开启此功能&…

在运维工作中,磁盘文件满了,怎么办?

在运维工作中&#xff0c;磁盘文件满了是一个常见的问题&#xff0c;处理这种情况需要快捷定位问题、清理空间&#xff0c;并采用措施防止再次发生。以下是详细的处理步骤&#xff1a; 1. 确认磁盘使用情况 首先&#xff0c;需要确认磁盘的使用情况&#xff0c;明确是哪个分区…

iOS指纹归因详解

iOS 指纹归因&#xff08;Fingerprint Attribution&#xff09;详解 1. 指纹归因的概念 指纹归因&#xff08;Fingerprint Attribution&#xff09;是一种无 ID 归因&#xff08;ID-less Attribution&#xff09;技术&#xff0c;主要用于广告跟踪、用户识别或流量分析。它基…