Asp.net Core 8项目拆分与多MVC项目协同运行及重定向问题咨询
一、Asp.net Core 8拆分项目(不使用WebApi、微服务、类库)的实现方案
如果不想用类库、WebApi或微服务拆分解决方案,可以通过多MVC项目+共享资源链接的方式实现功能拆分:
- 按功能拆分独立MVC项目:将登录、聊天、用户管理等不同业务模块,分别创建为单独的Asp.net Core MVC WebApplication项目,全部加入同一解决方案。
- 用文件链接共享代码:对于需要复用的模型、工具类等代码,不要复制到每个项目,而是右键目标项目→添加→现有项,选中要共享的文件后,点击添加按钮旁的下拉箭头,选择添加为链接。这样多个项目共用同一份文件,修改时所有引用的项目都会同步更新。
- 统一配置管理:在解决方案根目录创建共享配置文件(如
appsettings.shared.json),每个项目的Program.cs中加载该文件:builder.Configuration.AddJsonFile("../appsettings.shared.json", optional: true, reloadOnChange: true); - 共享静态资源:在解决方案根目录创建
SharedStatic文件夹存放公共静态文件(如样式、脚本),每个项目通过中间件指定加载路径:app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "../SharedStatic")), RequestPath = "/SharedStatic" });
二、同一解决方案下多MVC项目协同运行及重定向问题解决
1. 同时运行多个项目
默认情况下VS只会启动一个项目,要让多个项目同时运行:
- 右键解决方案→属性→启动项目,选择多个启动项目,将需要同时运行的项目的操作设置为启动,保存设置即可。
- 每个项目需设置不同端口:打开各自的
launchSettings.json,修改applicationUrl为不同地址,比如登录项目用http://localhost:5000,聊天项目用http://localhost:5001。
2. 实现跨项目重定向
- 使用完整URL重定向:从登录项目重定向到聊天项目时,必须使用完整的目标项目URL,不要用相对路径:
// 登录成功后重定向到聊天项目的Chat页面 return Redirect("http://localhost:5001/Chat"); - 避免硬编码端口:可以在登录项目的
appsettings.json中配置其他项目的地址:
然后在代码中读取配置后拼接URL:"ServiceUrls": { "ChatApp": "http://localhost:5001" }var chatAppUrl = builder.Configuration["ServiceUrls:ChatApp"]; return Redirect($"{chatAppUrl}/Chat");
3. 解决跨域访问问题
因为不同项目端口不同,属于跨域场景,需在聊天项目中配置CORS:
- 注册CORS服务:
builder.Services.AddCors(options => { options.AddPolicy("AllowLoginOrigin", policy => { policy.WithOrigins("http://localhost:5000") // 允许登录项目的地址 .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); // 如果需要传递Cookie等凭证 }); }); - 启用CORS中间件(注意顺序要放在
UseRouting之后,UseAuthorization之前):app.UseCors("AllowLoginOrigin"); - SignalR跨域配置:如果登录项目要连接聊天项目的SignalR Hub,需在映射Hub时指定CORS策略:
app.MapHub<ChatHub>("/chatHub").RequireCors("AllowLoginOrigin");
内容的提问来源于stack exchange,提问作者Fatemeh Seyf
相关产品推荐
相关产品推荐

