已部署的Blazor网站Http Post请求行为与开发环境不一致,返回405错误
已部署的Blazor网站Http Post请求行为与开发环境不一致,返回405错误
看起来你踩了开发环境正常、部署到测试服务器就出问题的典型坑,我之前处理过好几个类似的405情况,给你梳理几个最可能的排查方向:
- IIS的WebDAV模块搞的鬼:这是最常见的原因!很多测试服务器的IIS默认开启了WebDAV模块,它会偷偷拦截POST、PUT这类请求,直接返回405。你可以在站点的
web.config里添加这段配置禁用它:
<system.webServer> <modules runAllManagedModulesForAllRequests="false"> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV" /> </handlers> </system.webServer>
路由路径不匹配:开发环境你可能是直接在根路径运行,但测试服务器如果把站点部署在虚拟目录下,你的请求路径
/api/Account/Login就会指向服务器根目录,而不是你的站点虚拟目录,导致服务器找不到对应的接口,返回405(这种情况服务器会误以为你用了错误的请求方法)。你可以打开浏览器的开发者工具,看Network面板里的实际请求URL是否正确。IIS请求筛选限制了POST方法:测试服务器的IIS可能配置了请求筛选规则,禁止了POST方法。你可以登录到测试服务器的IIS管理器,找到你的站点,打开“请求筛选”功能,检查HTTP方法列表里是否包含POST,如果没有就添加进去。
CORS配置遗漏:如果你的Blazor前端和API是分开部署的(开发环境可能用了代理隐藏了跨域问题),测试服务器上的API可能没配置允许前端域名的CORS策略,虽然CORS通常返回403,但有时候也会引发405的异常表现。你可以检查API的CORS配置是否包含测试环境的前端域名。
你可以先从禁用WebDAV开始排查,这个解决了大部分人的405问题。
内容来源于stack exchange
相关产品推荐
相关产品推荐

