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

IIS部署API返回405 Method Not Allowed,本地正常求助

解决IIS部署API后返回405状态码的方案

问题描述

API本地运行时,通过DELETE请求调用/api/values/DegerSil/S00001/返回200状态码;部署到IIS后,相同请求返回405 Method Not Allowed,Flutter端使用http.delete发起请求。

排查与解决步骤

  • 启用IIS的DELETE谓词
    打开IIS管理器,进入目标API站点的「请求筛选」→「HTTP谓词」,确认DELETE在允许列表中,若没有则添加该谓词并保存。

  • 禁用WebDAV模块
    WebDAV会拦截DELETE、PUT等请求,是405错误的常见诱因:

    1. 进入站点的「模块」功能,删除WebDAVModule;
    2. 或直接修改站点根目录的web.config,添加以下配置:
<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>
  • 校验API路由一致性
    确认IIS部署环境的路由与本地一致:若站点配置了虚拟目录,Flutter请求URL需添加虚拟目录前缀,例如http://192.168.0.21/虚拟目录/api/values/DegerSil/S00001/。

  • 配置CORS允许DELETE方法
    若Flutter应用与API跨域,需在API后端的CORS配置中明确允许DELETE方法(以ASP.NET为例):

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowAll", policy =>
    {
        policy.AllowAnyOrigin()
              .AllowAnyHeader()
              .AllowMethods("GET", "POST", "PUT", "DELETE");
    });
});
  • 检查IIS身份验证设置
    若API无需身份验证,确保站点启用「匿名身份验证」;若需验证,确认配置的身份验证方式与请求匹配,避免权限拦截。

你的Flutter请求代码

void TraSil() async {
  try {
    String uri = 'http://192.168.0.21/api/values/DegerSil/S00001/';
    Uri ur = Uri.parse(uri);
    final response =
        await http.delete(ur).timeout(const Duration(seconds: 30));
    if (response.statusCode == 200) {
      print("Deleted");
    } else {
      throw response.reasonPhrase.toString();
    }
  } catch (e) {
    _showMyDialog("Hata", e.toString());
  }
}

内容的提问来源于stack exchange,提问作者Ahmet Enes Söylemez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:02:24