C#跨域核心是后端配置Access-Control-Allow-Origin等响应头,ASP.NET Core需在Program.cs中三步完成:AddCors注册策略、UseCors启用且位置在UseAuthorization前、策略中禁用AllowAnyOrigin与AllowCredentials组合;Web API 2则依赖EnableCorsAttribute全局或控制器级配置。
直接说结论:C# 处理跨域问题,核心是让服务器在响应头中正确返回 Access-Control-Allow-Origin 等 CORS 相关字段——但**不能靠前端“改请求”解决,必须后端主动配置**;不同 C# 框架(.NET Framework Web API vs ASP.NET Core)配置方式完全不同,混用会导致 403 或预检失败。
Program.cs 中配策略 + 中间件这是当前主流方案(.NET 6+),必须三步全做,缺一不可:
builder.Services.AddCors():注册服务并定义命名策略(比如叫 "AllowFrontend").WithOrigins("http://localhost:5173")),禁止用 .AllowAnyOrigin() 配合 .AllowCredentials()(会直接报错)app.UseCors("AllowFrontend"):必须放在 app.UseAuthorization() 之前,否则不生效var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowFrontend", policy =>
{
policy.WithOrigins("http://localhost:5173", "https://prod.myapp.com")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials(); // 若需带 cookie/token,必须指定具体源,不能用 "*"
});
});
builder.Services.AddControllers();
var app = builder.Build();
app.UseCors("AllowFrontend"); // ⚠️ 位置很关键:必须在 UseAuthorization 之前
app.UseAuthorization();
app.MapControllers();
app.Run();
Microsoft.AspNet.WebApi.Cors 包老项目常见,依赖 NuGet 包,且配置入口在 Global.asax.cs 或 WebApiConfig.cs:
Install-Package Microsoft.AspNet.WebApi.Cors
GlobalConfiguration.Configuration.EnableCors() 中传入 EnableCorsAttribute
new EnableCorsAttribute("*", "*", "*") 在生产环境等同于裸奔,尤其带认证时会失效[EnableCors(origins: "http://localhost:3000", headers: "*", methods: "*")]
// WebApiConfig.cs
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var cors = n
ew EnableCorsAttribute(
origins: "http://localhost:3000",
headers: "Content-Type,Authorization,X-Requested-With",
methods: "GET,POST,PUT,DELETE,OPTIONS");
config.EnableCors(cors);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}}
遇到 OPTIONS 预检失败?检查这三点
浏览器对非简单请求(如带 Authorization 头、Content-Type: application/json)会先发 OPTIONS 请求。失败通常因为:
OPTIONS 路由(ASP.NET Core 中 UseCors 必须在 UseRouting 之后、UseEndpoints 之前)OPTIONS 方法(.WithMethods("GET", "POST", "OPTIONS"))web.config 但 Access-Control-Allow-Methods 值里漏了 OPTIONS
很多问题不是 CORS 配错了,而是被其他机制干扰:
AllowCredentials = true 时,WithOrigins 不能写 "*",否则浏览器直接拒绝——必须列明具体协议+域名+端口
fetch 发送带凭据的请求,必须加 credentials: "include",否则后端收不到 cookie
web.config 手动加响应头,要确认 节点没被上级配置覆盖devServer.proxy 是临时绕过 CORS 的前端方案,上线必须切回真实 CORS 配置最常被忽略的一点:CORS 是浏览器强制执行的安全策略,Postman、curl、后端调用完全不受影响——所以测试一定要用真实页面打开,看浏览器开发者工具 Network 标签页里的请求头和响应头是否完整出现 Access-Control-Allow-* 字段。
# vue
# react
# js
# 前端
# json
# nginx
# cookie
# 浏览器
# app
# access
# 端口
# 工具
# iis
# 中间件
# postman
# include
# cURL
# http
# microsoft
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Win11怎么查看硬盘型号_Windows 11检测硬盘信息方法【技巧】
如何使用正则表达式批量替换重复的 *- 模式为固定字符串
ACF 教程:如何正确更新嵌套在多层 Group 字段内的子字段
Python模块的__name__属性如何由导入方式决定?
Windows怎样拦截WPS弹窗广告_Windows拦截WPS弹窗广告设置【步骤】
小程序里php怎么变mp4_小程序调用php生成mp4视频方法【教程】
Windows 11怎么更改锁屏超时时间_Windows 11电源选项中设置屏幕关闭时间
Win11开始菜单打不开_修复Windows 11点击开始图标无响应【教程】
Python网络超时处理_健壮性设计说明【指导】
Win11系统占用空间大怎么办 Win11深度瘦身清理指南【优化】
Win11怎么设置右键刷新选项_Windows11显示更多选项技巧
如何使用Golang log设置日志输出格式_Golang log日志格式示例
php485返回空数组怎么回事_php485数据接收为空排查指南【详解】
如何使用Golang捕获测试日志_Golang testing日志记录方法
Python与GPU加速技术_CUDA与Numba高性能计算实践
Win11怎样彻底卸载自带应用_Win11彻底卸载自带应用方法【步骤】
如何使用Golang安装API文档生成工具_快速生成接口文档
Python文件和流处理指南_高效读写大体积数据文件
Windows10系统怎么查看防火墙状态_Win10安全中心网络保护
Win11怎么关闭通知消息_屏蔽Windows 11右下角弹窗通知设置【详解】
Win11怎么设置虚拟内存_Windows 11优化内存性能提升速度【技巧】
本地php环境出现502错误_nginx或apache502badgateway解决技巧【解答】
windows 10专注助手怎么关闭_windows 10禁用通知提醒功能方法
零基础学会Python自动化办公_高效处理Excel与PDF文档
C#如何在一个XML文件中查找并替换文本内容
c++怎么操作redis数据库_c++ hiredis库连接与命令执行【实战】
如何用::实现单例模式_php静态方法与作用域操作符应用【技巧】
Windows11怎样开启游戏模式_Windows11游戏模式开启攻略【方法】
c++怎么实现大文件的分块读写_c++ 文件指针seekp与seekg偏移控制【方法】
Win11怎么修复系统文件_使用sfc命令修复Win11系统【技巧】
php怎么下载安装后设置默认字符集_utf8配置步骤【详解】
Windows电脑键盘突然失灵怎么办?(驱动与硬件排查)
php中常量能用::访问吗_类常量与作用域操作符使用场景【汇总】
Win11怎么设置任务栏图标大小_Windows11注册表TaskbarSi修改
VSC里PHP变量未定义报错怎么解决_错误抑制技巧【解答】
新手学PHP架构总混淆概念咋办_重点梳理【教程】
如何在Golang中实现WebSocket广播_使用Channel和协程分发消息
Python性能剖析高级教程_cProfileLineProfiler优化案例解析
Win10怎样清理C盘阿里旺旺缓存_Win10清理阿里旺旺缓存步骤【步骤】
Win11怎么关闭小组件_Win11禁用任务栏天气与小组件方法【设置】
MAC怎么解压RAR格式文件_MAC第三方解压工具安装与压缩包管理【教程】
如何更改Windows资源管理器的默认启动位置?(快速访问/此电脑)
Win11怎么设置单手模式_Win11触控键盘布局调整教程【技巧】
如何使用Golang捕获并记录协程panic_保证主程序稳定运行
Win11怎么设置快速访问主页_Windows11资源管理器文件夹选项
Win11 explorer.exe频繁崩溃_修复Win11资源管理器无限重启【步骤】
c# 在ASP.NET Core中管理和取消后台任务
Win11怎么格式化U盘_Win11系统U盘格式化与文件系统选择【教程】
Windows10电脑怎么设置防火墙出站规则_Win10禁止程序联网教程
Win10电脑怎么设置IP地址_Windows10网络属性固定IP配置
2026-01-05
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。