ASP.NET Core怎么配置跨域 CORS策略配置方法

来源:这里教程网 时间:2026-02-21 17:39:35 作者:

ASP.NET Core 配置跨域(CORS)策略,核心是通过

AddCors
注册服务 +
UseCors
启用中间件,并在控制器或方法上指定策略名称。关键不是“开不开”,而是“怎么精准控制谁、哪些请求、允许什么操作”。

注册 CORS 服务并定义命名策略

Program.cs
(.NET 6+)中,调用
AddCors
添加服务,并用
AddPolicy
定义一个带名字的策略。策略里明确允许的源、方法、头等:

WithOrigins("https://example.com")
限制具体前端域名(不建议用
"*"
,尤其带凭据时)
AllowAnyMethod()
WithMethods("GET", "POST")
控制 HTTP 方法
AllowCredentials()
允许携带 Cookie/Authorization(此时
WithOrigins
不能为
"*"
WithHeaders("Content-Type", "X-Requested-With")
AllowAnyHeader()
控制请求头

示例:


builder.Services.AddCors(options =>
{
    options.AddPolicy("MyApiPolicy", policy =>
    {
        policy.WithOrigins("https://myapp.com")
              .AllowAnyMethod()
              .AllowCredentials()
              .WithHeaders("Content-Type", "Authorization");
    });
});

启用 CORS 中间件并指定策略

UseCors
调用时传入策略名,位置必须在
UseRouting
之后、
UseEndpoints
(或
MapControllers
)之前:

app.UseRouting();
<p>app.UseCors("MyApiPolicy"); // ✅ 放这里</p><div class="aritcle_card flexRow">
                                                        <div class="artcardd flexRow">
                                                                <a class="aritcle_card_img" href="/ai/1915" title="Summarizer"><img
                                                                                src="https://www.herecours.com/d/file/efpub/2026/21-21/20260221140415179527.jpg" alt="Summarizer"  onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
                                                                <div class="aritcle_card_info flexColumn">
                                                                        <a href="/ai/1915" title="Summarizer">Summarizer</a>
                                                                        <p>基于 AI 的文本段落摘要生成器</p>
                                                                </div>
                                                                <a href="/ai/1915" title="Summarizer" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
                                                        </div>
                                                </div><p>app.UseAuthentication();
app.UseAuthorization();</p><p>app.MapControllers();

注意:

UseCors
不会自动应用到所有端点——只有被路由匹配到且没被其他中间件短路的请求才生效。

按需应用策略:全局 / 控制器 / 方法级

策略注册后,有三种方式启用:

全局启用:在
UseCors("xxx")
里指定策略名,所有匹配路由的请求都走该策略
控制器级别:在 Controller 类上加
[EnableCors("MyApiPolicy")]
方法级别:在 Action 方法上加
[EnableCors("MyApiPolicy")]
,可覆盖控制器策略

如果某个接口不需要跨域,就别加;如果要多个策略,可分别命名并在不同地方引用。

调试和常见坑点

遇到跨域失败,先看浏览器控制台的预检(OPTIONS)响应头是否含

Access-Control-Allow-Origin

404 OPTIONS 请求?检查是否启用了
UseCors
,且顺序正确
返回 204 但没头?确认策略名拼写一致,且
AddPolicy
AddCors
内部
带凭据却报错“Origin not allowed”?检查
WithOrigins
没写成
"*"
,且协议、端口、子域名完全匹配
开发环境想临时放开?可定义一个
"DevPolicy"
允许
http://localhost:3000
等常用前端地址

基本上就这些。配置本身不复杂,容易忽略的是策略名匹配、中间件顺序、凭据与通配符互斥这三点。

相关推荐