You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多项目解决方案中调用.NET Core 7 API出现405方法不允许错误求助

排查.NET 7 API与Blazor客户端共存时的405 Method Not Allowed错误

1. 确认CORS中间件的顺序

CORS中间件的位置直接影响规则是否生效,必须放在路由和控制器映射之前。检查你的Program.cs,确保UseCors的调用顺序正确:

var builder = WebApplication.CreateBuilder(args);

// 先添加CORS服务
builder.Services.AddCors();
builder.Services.AddControllers();

var app = builder.Build();

// CORS中间件要在路由、控制器映射之前
app.UseCors(x => x
    .AllowAnyOrigin()
    .AllowAnyMethod()
    .AllowAnyHeader());

app.UseRouting();
app.MapControllers();

app.Run();

如果UseCors放在UseRouting或MapControllers之后,CORS规则不会对API请求生效,可能引发跨域预检失败导致的405错误。

2. 核对多项目启动的配置细节

当设置Blazor为启动项并启用多项目启动时,确认API的启动配置无问题:

  • 右键解决方案 → 属性 → 启动项目 → 选择「多启动项目」
  • 确保API项目的操作设为「启动」,且端口确实是http://localhost:4000
  • 打开API项目的launchSettings.json,检查applicationUrl是否和上述端口一致,避免端口冲突或配置错误

3. 验证API路由与请求方法的匹配性

405错误核心是请求方法与接口定义不匹配,仔细核对:

  • Postman调用时,确认请求URL、HTTP方法(GET/POST/PUT等)与API控制器的路由完全一致
  • 检查控制器方法上的[HttpGet]/[HttpPost]等特性是否正确,比如不要把POST请求发到标记为[HttpGet]的接口
  • 例:若控制器方法是[HttpGet("api/orders")],则必须用GET请求http://localhost:4000/api/orders,用POST会直接返回405

4. 排查中间件拦截问题

如果API项目启用了静态文件中间件(app.UseStaticFiles()),需确认其路径不会与API路由冲突。静态文件中间件应放在CORS之后、路由之前,避免请求被错误导向静态资源而非API接口。

5. 检查HTTPS重定向的影响

若API配置了app.UseHttpsRedirection(),而你用HTTP协议调用http://localhost:4000,重定向过程可能会丢失原请求方法(默认重定向为GET),导致405错误。可以暂时注释掉该中间件测试,或改用HTTPS地址调用API。

6. 验证CORS规则是否生效

在Postman中添加请求头Origin: http://localhost:xxxx(替换为Blazor客户端的运行端口),发送请求后查看响应头是否包含Access-Control-Allow-Origin。若没有,说明CORS中间件未正确生效,回到第一步重新调整中间件顺序。


内容的提问来源于stack exchange,提问作者Musaffar Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:23:03