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

极简ASP.NET Core Web API调用PUT接口返回405方法不允许错误

解决PUT请求返回405 Method Not Allowed错误

常见原因及排查步骤

1. 确认PUT端点是否正确注册

检查ASP.NET Core应用启动代码,确保app.MapPut("/sirs/{Id}", ...)这段代码在app.Run()之前执行,且没有被环境判断、条件分支等逻辑跳过。可以在端点方法内添加调试输出(比如Console.WriteLine("PUT端点已触发")),验证程序启动时是否加载了该端点。

2. 检查CORS配置(跨域场景)

如果客户端和API不在同一域名下(比如前端项目、Blazor WASM等),需确保CORS策略允许PUT方法:

// 服务配置阶段
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowClient", policy =>
    {
        policy.WithOrigins("你的客户端域名") // 例如"http://localhost:3000"
              .AllowAnyHeader()
              .WithMethods("GET", "POST", "PUT", "DELETE"); // 必须包含PUT
    });
});

// 管道配置阶段(注意顺序)
app.UseCors("AllowClient");
app.UseRouting();
app.UseAuthorization();
// 注册PUT端点
app.MapPut("/sirs/{Id}", async (int Id, SIRCContext db, Sir sirc) =>
{
    // 你的端点逻辑
});
app.Run();

3. 验证请求URL与路由匹配

  • 确认客户端_httpClient的BaseAddress配置正确,比如API的BaseAddress是https://localhost:5001/,那么客户端请求的完整URL应为https://localhost:5001/sirs/1,而非其他路径。
  • 虽然ASP.NET Core路由默认不区分大小写,但尽量保持客户端请求的路由参数(id)与API定义的(Id)一致,避免潜在问题。

4. 检查中间件顺序

确保中间件顺序符合规范:CORS中间件 → 路由中间件 → 授权中间件 → 端点映射。顺序错误可能导致请求被提前拦截,无法到达PUT端点。

5. 捕获详细错误信息

修改客户端代码,捕获更具体的错误详情,帮助定位问题:

public async Task UpdateSIRC(int id, Sir sirc)
{
    try
    {
        await SetAuthToken();
        var response = await _httpClient.PutAsJsonAsync($"/sirs/{id}", sirc);
        response.EnsureSuccessStatusCode();
        statusMessage = "Update Successful";
    }
    catch (HttpRequestException ex)
    {
        var responseContent = await response.Content.ReadAsStringAsync();
        statusMessage = $"更新失败: {ex.Message},状态码: {ex.StatusCode},服务器返回: {responseContent}";
    }
}

通过服务器返回的内容,你可以看到允许的HTTP方法列表(比如Allow: GET, POST),确认PUT方法是否未被注册。

6. 排查路由冲突

检查是否存在其他路由与/sirs/{Id}路径重复但使用了不同HTTP方法的情况,这种冲突可能导致服务器返回405错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:02:42