You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Swagger UI及C# API项目部署到公网服务器?

一、部署前本地预校验

先把本地配置调整到位,避免部署后出现基础问题:

  • 放开Swagger的生产环境限制:默认C#项目的Swagger配置只会在开发环境生效,必须修改Program.cs里的判断逻辑,否则部署后访问Swagger会直接404,参考配置:
// 不要只在Development环境启用Swagger
if (app.Environment.IsDevelopment() || app.Environment.IsProduction())
{
    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "API V1");
        // 可选配置:把Swagger设为根路径访问,不用额外加/swagger后缀
        // c.RoutePrefix = string.Empty;
    });
}
  • 调整服务监听地址:不要只绑定localhost,部署时需要监听0.0.0.0对应的端口,否则外网请求打不进来,可以在发布启动时加参数--urls "http://0.0.0.0:端口号"实现。
  • 提前配置跨域规则:你的React前端托管在Netlife,和API域名不一致,必须在C#的CORS配置里把前端的Netlife域名加入允许列表,不要直接开全源允许,存在安全风险。
  • 本地发布验证:在VS里右键API项目选择发布,选文件夹模式,匹配目标服务器的运行时(比如linux-x64、win-x64、arm64),发布完成后本地运行发布包内的dll文件,确认本地访问Swagger、调用接口都正常再上传部署。

注意:你当前用的Netlife是静态站点托管服务,只能跑前端静态资源,不支持.NET运行时,没法直接部署C#写的API。

二、低成本/免费托管方案推荐

按成本从低到高、运维复杂度从简到繁排序:

  • 零成本PaaS方案:Render免费档,原生支持.NET 6/7/8项目部署,不需要自己维护服务器,免费档每月提供750小时运行时长,个人测试完全够用,唯一限制是15分钟无请求会自动休眠,首次冷启动需要等3-5秒加载。
  • 永久免费自管方案:Oracle Cloud永久免费云服务器,注册通过后可免费拿到1核1G的ARM或x86实例,没有运行时长、休眠限制,只要不超配额就可以永久使用,仅注册时需要信用卡做身份验证,不会产生扣费。
  • 低成本长期方案:各大云厂商的轻量应用服务器,学生档每月仅需几元到十几元,普通低配实例每月20-30元,完全掌控服务器环境,适合正式上线的小型项目。
三、具体部署操作流程

方案1:Render平台部署(零运维,10分钟可完成)

  • 把本地API代码推送到GitHub/GitLab的私有/公开仓库。
  • 注册Render账号后选择新建Web Service,关联存储API代码的仓库。
  • 填写部署配置:
    • 运行环境选择.NET
    • 构建命令填写dotnet publish -c Release -o publish
    • 启动命令填写dotnet publish/你的API项目入口dll名.dll --urls "http://0.0.0.0:$PORT"
    • 新增环境变量ASPNETCORE_ENVIRONMENT=Production
  • 点击部署等待2-3分钟构建完成,平台会自动分配一个二级域名,直接访问该域名加/swagger路径就能打开Swagger页面,接口也可正常调用。
  • 把React项目里的API请求地址替换为这个分配的域名,重新部署前端即可联调。

方案2:自管云服务器部署(无休眠,以Ubuntu系统为例)

  • 服务器初始化完成后,安装对应版本的ASP.NET Core运行时即可,不需要安装完整SDK(SDK是开发环境用的,服务器装运行时就能运行发布好的程序)。
  • 把本地验证通过的发布包通过scp或FTP传到服务器目录,比如/var/www/myapi。
  • 配置systemd守护进程,实现API开机自启、崩溃自动重启,参考配置:
# 配置文件路径 /etc/systemd/system/myapi.service
[Unit]
Description=C# API Service
[Service]
WorkingDirectory=/var/www/myapi
ExecStart=/usr/bin/dotnet /var/www/myapi/你的API入口dll名.dll --urls "http://0.0.0.0:5000"
Restart=always
RestartSec=10
SyslogIdentifier=myapi
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target

配置写完依次执行systemctl daemon-reload、systemctl enable myapi、systemctl start myapi启动服务。

  • 安装Nginx做反向代理,把80/443端口的公网请求转发到本地5000端口的API服务,同时可以配置免费SSL证书开启HTTPS,核心配置参考:
server {
    listen 80;
    server_name 你的服务器公网IP/绑定的域名;
    location / {
        proxy_pass http://localhost:5000;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  • 在服务器安全组/防火墙规则里放开80、443端口,访问公网IP加/swagger即可正常打开文档,最后把前端的API请求地址替换为该公网地址即可。
四、常见问题排查
  • Swagger访问404:优先检查Program.cs里的Swagger配置是否限制了仅开发环境启用,其次检查反向代理是否拦截了/swagger开头的请求路径。
  • Swagger页面样式加载失败:检查反向代理的静态资源转发规则,确认/swagger路径下的css、js文件没有被拦截。
  • 前端调用接口报跨域错误:检查C#的CORS配置是否正确加入了前端的Netlife域名,注意不要同时开启AllowCredentials和全源通配符,会触发跨域策略报错。
  • 本地运行正常、服务器启动失败:检查发布时选择的运行时架构是否和服务器匹配,比如ARM架构的服务器不能运行x64架构的发布包。
  • 不想Swagger被公开访问:可以在Nginx层给/swagger路径加基础身份认证,输入正确用户名密码才能访问文档,避免接口信息泄露。

内容的提问来源于stack exchange,提问作者G-genius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 04:54:17