同一解决方案能否共存两个ASP.NET Core Web应用?含MVC与API问题
问题1:能否在同一个解决方案中并存两个ASP.NET Core Web应用?
当然可以!你只需要在IDE里对着解决方案右键选择「添加」->「新项目」,依次创建两个ASP.NET Core Web应用项目即可。它们会作为独立项目存在于同一个解决方案下,既方便统一管理代码,也能分别调试运行。
问题2:能否将两个ASP.NET Core Web应用分别设置为MVC应用与Web API应用?
完全没问题!这种分层架构很常见——用MVC项目做前端展示层,Web API项目做数据接口层,你能编译运行说明基础项目配置是没问题的。至于你遇到的「无法从API控制器获取数据」的问题,我整理了几个最常见的排查方向:
路由匹配错误:Web API默认依赖属性路由,务必确认你的API控制器上标注了正确的路由特性。比如:
[ApiController] [Route("api/[controller]")] public class DemoController : ControllerBase { [HttpGet] public IActionResult GetData() { return Ok(new { Message = "测试数据" }); } }此时正确的请求URL应该是
https://localhost:<你的API端口>/api/Demo,如果URL和路由不匹配,自然拿不到数据。多项目启动配置问题:如果你的MVC项目需要调用API项目,要确保两个项目同时启动。在解决方案属性里,找到「启动项目」选项,选择「多个启动项目」,把两个项目的操作都设为「启动」,不然可能只启动了MVC项目,API根本没运行。
跨域限制问题:如果MVC项目和API项目的端口不同,浏览器会触发跨域安全限制,导致请求被拦截。你需要在API项目的
Program.cs中配置跨域中间件:// 添加跨域服务 builder.Services.AddCors(options => { options.AddPolicy("AllowMvcOrigin", policy => { // 建议指定具体的MVC项目地址,比如"https://localhost:5001",而非AllowAnyOrigin policy.WithOrigins("https://localhost:<你的MVC端口>") .AllowAnyMethod() .AllowAnyHeader(); }); }); // 注意中间件顺序:在UseRouting之后,UseAuthorization之前添加 app.UseCors("AllowMvcOrigin");API项目未正常启动或报错:检查API项目的调试控制台,看有没有启动失败的日志,比如端口被占用、依赖缺失等。另外可以直接用Postman或者浏览器地址栏访问API接口,确认接口本身是否能正常返回数据,排除MVC项目请求代码的问题。
控制器返回逻辑问题:确认API控制器的方法是否正确返回了数据,比如是否用了
return Ok(data)这种符合Web API规范的返回方式,有没有在代码中抛出未处理的异常导致返回500错误。可以打开浏览器开发者工具的「网络」标签,查看请求的状态码和响应内容,定位具体错误。
内容的提问来源于stack exchange,提问作者mko

