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

.NET Core GraphQL服务CORS跨域问题求助:预检请求未通过检查

.NET Core GraphQL服务CORS预检失败问题修复方案

问题根源

你的CORS策略仅开放了GET方法,但GraphQL的变更(Mutation)请求用的是POST,而且浏览器发起的预检OPTIONS请求也未被允许,加上WithOrigins("React Url")是占位符未替换为真实的React应用地址,这才导致了跨域拦截。

修复步骤

1. 修正CORS策略配置

更新AddCors的规则,覆盖GraphQL所需的请求方法,并替换为实际的React应用地址:

var policyName = "_myAllowSpecificOrigins";
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCors(options =>
{
    options.AddPolicy(name: policyName,
                      builder =>
                      {
                          // 替换为你的React应用真实地址,多源用逗号分隔
                          builder.WithOrigins("http://localhost:3000")
                                 // 允许GraphQL常用请求方法
                                 .WithMethods("GET", "POST", "OPTIONS")
                                 .AllowAnyHeader();
                      });   
});

2. 确保中间件顺序正确

当前你的中间件顺序没问题,保持UseCors在UseRouting之后、UseAuthentication/UseAuthorization之前即可。

3. 为GraphQL端点强制绑定CORS策略(可选)

如果全局策略未生效,可在映射GraphQL端点时明确指定使用的CORS策略:

app1.UseEndpoints(endpoints =>
{
    endpoints.MapGraphQL().RequireCors(policyName);
    endpoints.MapControllers().RequireCors(policyName);
});

4. 检查IIS Express配置

确认项目launchSettings.json中的应用URL正确,若启用HTTPS,React应用的请求地址也要对应使用https://协议,避免协议不匹配导致的跨域问题。

生产环境注意事项

  • 禁止使用AllowAnyOrigin,必须指定明确的可信源地址,防止安全风险。
  • 确保WithOrigins配置的地址和React应用的请求地址完全一致(包括协议、域名、端口,不要带末尾斜杠)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:53:19