为什么我的ASP.NET Core日志中出现“POST requests are not supported”提示?
日志产生原因
- StaticFileMiddleware 静态文件中间件默认仅支持处理
GET和HEAD两种请求方法,收到 POST 请求时就会输出这条POST requests are not supported日志。 - 请求会走到静态文件中间件处理,本质是你的中间件配置顺序或者路由规则存在问题:
- ASP.NET Core 中间件是按注册顺序依次执行的,默认配置下
UseStaticFiles会放在路由中间件之前执行,所有请求都会先经过静态文件中间件判断是否为静态资源。 - 你这个修改密码接口的路由大概率没有统一的
/api前缀,刚好被静态文件中间件误判为静态资源路径(比如你站点下存在同名的目录/文件,或者手动开启了ServeUnknownFileTypes配置),所以中间件收到 POST 请求后先输出日志,再把请求传递给下游的路由中间件,路由匹配到你的 Controller 接口,所以接口本身可以正常返回。 - 其他 POST 接口没有出现该日志,就是因为它们的路由没有被静态文件中间件误判为静态资源路径。
- ASP.NET Core 中间件是按注册顺序依次执行的,默认配置下
- 出现两条相同日志的常见原因是你测试时触发了两次 POST 请求,比如 Swagger 调用异常重复提交、前端代码逻辑重复调用等。
能否安全忽略
如果你的接口功能完全正常,这条日志可以忽略,它不会影响业务逻辑的执行,只是静态文件中间件不处理POST请求的正常提示。但还是建议你做对应优化,避免产生无效日志,也能减少不必要的中间件判断开销。
优化方案
- 给所有 API 接口统一添加
/api前缀,比如给 Controller 加上[Route("api/[controller]")]路由特性,所有 API 请求路径都带/api,天然和静态资源路径区分开,静态文件中间件不会再尝试处理 API 请求。 - 调整静态文件中间件的配置,关闭
ServeUnknownFileTypes(默认状态为关闭,如果你手动开启了可以改回默认配置),避免所有路径都被当做静态资源判断。 - 如果你不需要用静态文件中间件处理 Razor 页面之外的资源,也可以给
UseStaticFiles加路径限制,只处理指定目录下的请求。
内容的提问来源于stack exchange,提问作者Randy
相关产品推荐
相关产品推荐

