本目录是把当前 board_app_new 的 Node/Express 实现 等价迁移 到 ASP.NET Core 的版本,便于你后续直接把 aspnet/ 整目录拷贝到新的 IIS 服务器部署。
BoardApp/:ASP.NET Core MVC 应用Views/Board/*.cshtml:页面模板(对应原 views/*.ejs)wwwroot/static/*:静态资源(对应原 public/board/*,在站点下以 /board/static/ 访问)Config/:配置读取与类型Services/:LDAP、SQL Server、场景与日历逻辑默认从下列目录读取配置(优先级从高到低):
BOARD_CONFIG_DIR 指向的目录config/需存在的 JSON(与 Node 版同名):
app.config.jsonldap.config.jsonpages.config.jsonscenarios.system.jsonscenarios.users.jsonsqlserver.config.jsondatasrc.json在 aspnet/BoardApp 下:
dotnet restore
dotnet run
默认监听端口来自 config/app.config.json 的 port(例如 3000),外部访问地址为:
http://127.0.0.1:3000/board/nginx/board.conf)兼容同一套 nginx 配置里 upstream board_app → 127.0.0.1:3000 时,后端可二选一,**无需改 nginx**:
| 契约项 | Node | ASP.NET |
|---|---|---|
| 对外路径前缀 | /board |
/board(UsePathBase) |
auth_request 子请求 |
GET /board/check/ → 200 / 401 |
同左 |
| Session Cookie | board.sid,Path=/ |
同左 |
| 登录与静态资源 | /board/login、/board/static/… |
同左 |
注意:两套程序应使用 同一套 config/*.json(或相同的 BOARD_CONFIG_DIR),否则切换后端时会话与场景数据不一致。app.config.json 里 trustProxy: true(Node)与 ASP.NET 里 TrustProxy + ForwardedHeaders 便于在 nginx 后正确识别 HTTPS/客户端 IP。
Windows 集成(Negotiate)一键登录([Authorize] + AdLoginAsync)及 IIS / nginx 对照 见:aspnet/NEGOTIATE-IIS-NGINX.md;nginx 示例(不覆盖原 board.conf):nginx/board-aspnet-negotiate.sample.conf。
:3000/board/ 访问(指导)3000dotnet publish 输出)放到站点物理路径。/board(本项目默认启用;也可用环境变量 BOARD_PATH_BASE=/board 显式设置)。访问:http://<服务器IP或域名>:3000/board/
ASP.NET 版新增了 /board/api/winauth/login,用于 Windows Authentication 集成登录:
HttpContext.User.Identity.Name 读取域账号(通常是 DOMAIN\\username)scenarios.users.json 中该用户自建场景/board/api/winauth/login 生效;最简单是整个站点禁用匿名)为了兼容你现在的 ldap.config.json,组校验是可选的:不填就不校验。
在 ldap.config.json 增加其中一个字段即可:
allowedGroupDN:单个组 DNallowedGroupDNs:多个组 DN(任意命中即通过)示例:
{
"url": "ldap://192.168.0.85:389",
"bindDN": "cn=ldap_proxy,ou=Service_Accounts,DC=testboard,DC=shsening,DC=com",
"bindPassword": "******",
"searchBase": "DC=testboard,DC=shsening,DC=com",
"searchFilter": "(sAMAccountName={{username}})",
"tlsOptions": null,
"allowedGroupDN": "CN=BoardUsers,OU=Groups,DC=testboard,DC=shsening,DC=com"
}
如果你不能/不想让应用感知 /board,可以在 IIS 用 URL Rewrite 把 /board/(.*) 重写到 /(.*),同时把应用当作站点根运行。
本项目默认使用方案 A;若你要用方案 B,需要调整 Program.cs 中的 PathBase 逻辑。
最终publish:
dotnet publish -c Debug -r win-x64 --self-contained false -o ./dist