Angular 5调用ASP.NET WebApi发送POST请求返回405错误求助
解决Angular 5调用ASP.NET后端出现405错误的问题
看起来你遇到的405错误(方法不允许)大概率和HTTP方法不匹配有关,先帮你梳理几个关键点:
1. 首先检查HTTP方法是否一致
你提到Postman测试POST请求正常,但你的Angular代码里用的是http.put():
return this.http.put(endpoint, body, httpOptions)
如果你的ASP.NET后端set接口是用[HttpPost]标记的,那前端发送PUT请求肯定会被拒绝,返回405。这是最可能的直接原因!
修正方案:把Angular里的请求改成post():
return this.http.post(endpoint, body, httpOptions) .catch(this.handleError);
2. 确认CORS配置的完整性
虽然你已经修改了web.config,但可以补充以下几点确保CORS正常工作:
- 确保
Access-Control-Allow-Methods包含你实际使用的HTTP方法(比如POST或PUT),你的配置里已经包含了,但可以再核对。 - 除了web.config,建议在ASP.NET后端显式启用CORS支持:
在Global.asax的Application_Start方法里添加:
或者在对应的Controller上添加特性:using System.Web.Http; using System.Web.Http.Cors; protected void Application_Start() { var corsSettings = new EnableCorsAttribute("*", "*", "*"); GlobalConfiguration.Configuration.EnableCors(corsSettings); // 其他初始化代码... }[EnableCors(origins: "*", headers: "*", methods: "*")] public class DopuskController : ApiController { // 你的Action方法... }
3. 验证请求头和URL的正确性
- 确认
httpOptions里的请求头确实正确设置了Content-Type:const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) }; - 检查请求的
endpoint是否和Postman里的完全一致,比如有没有多余的斜杠、拼写错误等。
4. 排查WebDAV或其他模块的干扰
你已经在web.config里移除了WebDAVModule,这一步是对的,因为WebDAV经常会拦截PUT/DELETE请求导致405。可以再确认你的handlers配置是否正确,确保ExtensionlessUrlHandler-Integrated-4.0能处理所有动词。
如果还是有问题,建议在handleError里打印出完整的错误信息,比如:
private handleError(error: any) { console.error('请求错误:', error); console.error('错误状态码:', error.status); console.error('错误响应:', error.error); return Observable.throw(error.message || '服务器错误'); }
通过错误细节可以更精准地定位问题。
内容的提问来源于stack exchange,提问作者Evgeniy Klenov
相关产品推荐
相关产品推荐

