WebAPI启用CORS失败:OPTIONS请求返回404 Not Found
解决WebAPI POST请求OPTIONS 404问题
针对POST接口OPTIONS请求返回404、仅GET接口正常的情况,按以下步骤排查修复:
1. 确认WebAPI路由与Action特性配置
- 检查
WebApiConfig.cs中的路由规则,若Login是控制器自定义Action,确保路由包含action参数:config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); - 给
Login方法标注[HttpPost]特性,明确指定请求方法:[HttpPost] public IHttpActionResult Login(...) { // 业务逻辑代码 }
2. 配置IIS处理OPTIONS请求
在项目根目录的web.config中,找到<system.webServer>节点,添加或修改以下配置:
- 启用OPTIONS请求处理程序:
<system.webServer> <handlers> <remove name="OPTIONSVerbHandler" /> <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" resourceType="Unspecified" requireAccess="None" /> </handlers> </system.webServer> - 补充CORS响应头(若全局CORS配置未生效时使用):
<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS" /> <add name="Access-Control-Allow-Headers" value="Content-Type" /> </customHeaders> </httpProtocol> </system.webServer>
3. 调整WebAPI CORS配置顺序
确保config.EnableCors(cors)的调用在路由映射之前,修改WebApiConfig.cs的Register方法:
public static void Register(HttpConfiguration config) { // 先启用CORS var cors = new EnableCorsAttribute("*", "*", "*"); config.EnableCors(cors); // 再配置路由 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); }
4. 局部启用CORS测试
如果全局配置无效,尝试在MemberController或Login方法上直接添加[EnableCors]特性:
[EnableCors(origins: "*", headers: "*", methods: "*")] public class MemberController : ApiController { [HttpPost] public IHttpActionResult Login(...) { // 业务逻辑代码 } }
5. 排查运行环境问题
- 确认WebAPI项目运行端口
26594未被其他进程占用 - 清理项目后重新生成,重启IIS Express
内容的提问来源于stack exchange,提问作者Hasan Shouman
相关产品推荐
相关产品推荐

