ASP.NET Core 3.1 Web API控制器中HTTP Post Action无法触发求助
核心问题:终端中间件拦截请求
你的Startup.cs中,app.Run被放在了app.UseEndpoints之后,而app.Run是终端中间件——它会处理所有到达该位置的请求,直接返回响应,不会将请求传递给后续的中间件(包括控制器路由系统)。这就是为什么你的控制器方法永远不会被触发,请求直接返回了Planificador API iniciada。
解决方法
直接移除app.Run(context => context.Response.WriteAsync("Planificador API iniciada"));这一行代码。如果需要保留默认的根路径响应,可将其移至app.UseRouting()之前,但对于API项目来说,通常不需要这个全局响应。
其他排查验证点
确认请求URL正确性
正确的请求地址应为:POST https://<你的主机地址>/api/Planning/SaveTest
注意控制器名称是Planning(对应[controller]占位符),方法名是SaveTest。检查请求体格式
在Postman中需选择raw -> JSON格式,传入符合TestData结构的JSON数据,示例:{ "Id": 1, "Name": "测试数据" }若格式不匹配,
[FromBody]无法绑定数据,也可能导致请求异常。验证CORS策略配置
你使用了app.UseCors("default"),需确保在ConfigureServices方法中已正确注册该策略:public void ConfigureServices(IServiceCollection services) { services.AddControllers(); // 注册CORS策略 services.AddCors(options => { options.AddPolicy("default", policy => { policy.AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod(); }); }); }若策略未注册,CORS验证失败会导致请求被拦截。
临时排除认证/授权影响
若你尚未配置认证系统,可暂时注释app.UseAuthentication();和app.UseAuthorization();,测试请求是否能进入控制器,排除认证中间件的拦截问题。
内容的提问来源于stack exchange,提问作者kintela

