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

Angular6调用ASP.NET Core WebAPI时POST请求遇CORS错误

解决ASP.NET Core WebAPI与Angular6之间的POST请求CORS问题

看起来你已经做了基础的CORS配置,但还是踩了几个常见的坑,我帮你梳理下可能的原因和解决办法:

1. 调整ConfigureServices中服务注册的顺序

你现在是先注册AddMvc()再注册AddCors(),这会导致CORS策略无法被MVC正确加载——因为MVC服务会先初始化,后续的CORS配置无法生效。正确的顺序应该先注册CORS服务,再注册MVC服务:

public void ConfigureServices(IServiceCollection services)
{
    // 先配置CORS策略
    services.AddCors(options => 
    {
        options.AddPolicy("AllowCors", builder => 
        {
            builder.AllowAnyOrigin()
                   .AllowAnyMethod() // 直接允许所有请求方法(包含OPTIONS预检请求)
                   .AllowAnyHeader();
        });
    });

    // 再注册MVC服务
    services.AddMvc();
}

2. 检查路由与参数的匹配问题

你的POST方法路由是[HttpPost("{term}")],把term作为URL路径参数,而Angular请求也是把term拼在URL里。这种情况下,浏览器发送的OPTIONS预检请求会指向同一个带参数的URL,有时候ASP.NET Core的路由系统可能无法正确匹配这个OPTIONS请求,导致CORS报错。

你可以尝试两种调整方式:

方式一:把term改为查询参数

控制器代码:

[Route("api/[controller]")]
// 去掉控制器上的[EnableCors],用全局策略即可
public class SearchController : Controller
{
    [HttpPost]
    public async Task SaveSearch([FromBody]dynamic request, [FromQuery]string term)
    {
        _searchRepository.SaveSearch(term, request);
    }
}

Angular代码:

saveSearch(term: string, res:any) {
    this.http.post(`${this.serviceEndpoint}?term=${term}`, { term: term, origin: res.countryCode, request: res }).subscribe();
}

方式二:把term放到请求Body中

控制器代码:

[Route("api/[controller]")]
public class SearchController : Controller
{
    [HttpPost]
    public async Task SaveSearch([FromBody]dynamic request)
    {
        var term = request.term;
        _searchRepository.SaveSearch(term, request);
    }
}

Angular代码:

saveSearch(term: string, res:any) {
    this.http.post(this.serviceEndpoint, { term: term, origin: res.countryCode, request: res }).subscribe();
}

3. 移除重复的CORS配置

你既在Startup中全局应用了app.UseCors("AllowCors"),又在控制器上加了[EnableCors("AllowCors")],虽然理论上不冲突,但重复配置可能导致意外问题,建议只保留全局配置即可。

4. 清除浏览器缓存测试

有时候浏览器会缓存之前的CORS响应头,导致新的配置无法立即生效,你可以用浏览器的隐身模式测试,或者清除缓存后重试。

按照上面的步骤调整后,应该就能解决POST请求的CORS报错问题了。

内容的提问来源于stack exchange,提问作者gog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:32:33