Visual Studio MVC C#项目登录失败:Angular控制器连接拒绝求助
解决Angular前端调用MVC后端Token接口连接被拒绝的问题
看起来你遇到的核心问题是前端Angular请求的后端Token接口(http://localhost:1336/token)无法建立连接,导致登录逻辑直接进入错误分支。结合你提供的代码和报错信息,我给你一步步梳理排查和解决方法:
1. 先确认后端服务是否在正确端口运行
报错net::ERR_CONNECTION_REFUSED的本质是:前端请求的localhost:1336这个地址根本没有服务在监听。你需要先核实你的MVC后端实际运行的端口:
- 打开你的MVC项目,找到
Properties文件夹下的launchSettings.json文件,查看applicationUrl配置项,比如:
这里的5000/5001就是后端实际运行的端口,而不是你前端代码里写的1336。"applicationUrl": "http://localhost:5000;https://localhost:5001" - 或者在Visual Studio的Debug面板里,看项目启动后的地址栏,确认后端的访问端口。
2. 修正Angular前端的请求地址
你的authService.login方法应该是硬编码了http://localhost:1336/token这个地址,和后端实际端口不匹配。你需要修改这个地址:
- 找到你的
authService代码,把请求URL改成后端实际的端口,比如后端跑在5000端口,就改成:// authService里的login方法示例 this.login = function(username, password) { // 替换成后端实际的地址 return $http.post('http://localhost:5000/token', { username: username, password: password }); } - 更优雅的方式是使用相对路径(如果前端和后端部署在同域下),直接写
'/token',这样就不用硬编码端口:return $http.post('/token', { username: username, password: password });
3. 验证后端Token接口是否正常可用
即使端口对了,也要确认后端的/token接口确实存在且能正常响应:
- 用Postman或者浏览器直接访问
http://localhost:后端端口/token,发送POST请求,带上正确的账号密码参数,看是否能返回正常的Token。 - 如果接口不存在,检查MVC项目里是否有对应的Api控制器,比如是否有
TokenController,或者AccountController里是否有路由为[Route("token")]的登录方法。
4. 排查跨域问题(如果前后端端口不同)
如果前端和后端运行在不同端口,浏览器会触发跨域限制,也可能导致连接异常。你需要在MVC后端配置CORS:
- 安装CORS包:在NuGet包管理器里安装
Microsoft.AspNetCore.Cors。 - 在
Startup.cs里配置CORS中间件:public void ConfigureServices(IServiceCollection services) { // 添加CORS服务 services.AddCors(options => { options.AddPolicy("AllowLocalAngular", builder => builder.WithOrigins("http://localhost:前端端口") .AllowAnyHeader() .AllowAnyMethod()); }); // 其他服务配置... } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他中间件... // 启用CORS,放在路由中间件之前 app.UseCors("AllowLocalAngular"); app.UseRouting(); // 其他中间件... }
按照这几步排查,应该能解决你的登录失败问题。先从端口匹配开始查,这是最常见的原因。
内容的提问来源于stack exchange,提问作者Luca Salmaso
相关产品推荐
相关产品推荐

