在ASP.NET Core中启用CORS跨域资源共享的方法

 更新时间:2026年04月15日 09:00:15   作者:hefeng_aspnet  
跨域资源共享 (CORS) 是一种允许 Web 应用程序访问来自不同域的资源的机制,默认情况下,出于安全考虑,浏览器会阻止跨域 HTTP 请求,但是,您可以在 ASP.NET Core 应用程序中启用 CORS,以便在需要时允许此类请求,本文就给大家介绍了ASP.NET Core启用CORS的方法

如何在 ASP.NET Core 中启用 CORS

跨域资源共享 (CORS) 是一种允许 Web 应用程序访问来自不同域的资源的机制。默认情况下,出于安全考虑,浏览器会阻止跨域 HTTP 请求。但是,您可以在 ASP.NET Core 应用程序中启用 CORS,以便在需要时允许此类请求。本文将指导您使用现代最小托管模型在 ASP.NET Core 应用程序中逐步启用 CORS。

为什么需要 CORS?

假设您有一个托管在 [此处应填写服务器地址] 的前端应用程序,https://frontend.example.com它试图访问托管在 [此处应填写服务器地址] 的 API 。https://api.example.com如果未启用 CORS,浏览器将阻止此请求,从而导致CORS 策略错误。启用 CORS 可以让您指定哪些域可以安全地访问您的 API。

步骤 1:添加 CORS 服务

第一步是将 CORS 服务添加到您的应用程序中。

  1. 打开Program.cs文件。
  2. AddCors在服务配置部分注册 CORS 服务:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowSpecificOrigins", builder =>
    {
        builder.WithOrigins("https://frontend.example.com") // Replace with your allowed origins
               .AllowAnyHeader()
               .AllowAnyMethod();
    });
});
builder.Services.AddControllers();
var app = builder.Build();

步骤 2:应用 CORS 策略

您需要将 CORS 策略应用到您的应用程序。主要有两种方法:全局应用或针对特定端点应用。

全球

要为所有控制器启用该策略,请UseCors在请求管道配置中使用中间件:

app.UseCors("AllowSpecificOrigins"); // Apply CORS policy globally
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

每个端点

要为特定端点启用 CORS,请使用以下[EnableCors]属性:

[ApiController]
[Route("api/[controller]")]
public class MyController : ControllerBase
{
    [HttpGet]
    [EnableCors("AllowSpecificOrigins")]
    public IActionResult Get()
    {
        return Ok("CORS is enabled for this endpoint.");
    }
}

步骤 3:允许所有来源(可选)

如果要允许所有来源,可以按如下方式修改 CORS 策略:

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowAll", builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyHeader()
               .AllowAnyMethod();
    });
});

然后,"AllowAll"在全局或针对特定端点应用 CORS 时,使用此策略名称。注意:允许所有来源可能会使您的 API 面临安全风险,因此请谨慎使用。

步骤 4:测试 CORS 设置

配置好 CORS 后,可以使用 Postman 等工具、浏览器或前端应用程序从不同的源发送请求进行测试。检查响应头中的条目,Access-Control-Allow-Origin以确认 CORS 是否按预期工作。

常见问题及故障排除

  1. 策略未应用:请确保策略名称与UseCors中定义的策略名称匹配AddCors
  2. 选项请求失败:如果您的 API 包含复杂请求,请确保该OPTIONS方法已被允许。
  3. 配置错误的源:请仔细检查方法中的域名WithOrigins

结论

在 ASP.NET Core 中使用现代托管模型启用 CORS 非常简单,并且可以确保安全的跨域资源共享。通过有效地理解和配置 CORS 策略,您可以在保持安全性的同时增强应用程序的互操作性。

以上就是在ASP.NET Core中启用CORS跨域资源共享的方法的详细内容,更多关于ASP.NET Core启用CORS的资料请关注脚本之家其它相关文章!

相关文章

  • 深入分析XmlSerializer对象的Xml序列化与反序列化的示例详解

    深入分析XmlSerializer对象的Xml序列化与反序列化的示例详解

    本篇文章是对XmlSerializer 对象的Xml序列化与反序列化的应用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • .NET新能源汽车锂电池检测程序UI挂死问题分析

    .NET新能源汽车锂电池检测程序UI挂死问题分析

    这篇文章主要为大家介绍了.NET新能源汽车锂电池检测程序UI挂死问题分析 ,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • ASP.NET Core使用Middleware设置有条件允许访问路由

    ASP.NET Core使用Middleware设置有条件允许访问路由

    这篇文章主要介绍了ASP.NET Core使用Middleware设置有条件允许访问路由,文章围绕主题相关资料展开学习内容,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-02-02
  • ASP.NET Core使用功能开关控制路由访问操作(续)

    ASP.NET Core使用功能开关控制路由访问操作(续)

    这篇文章主要介绍了ASP.NET Core使用功能开关控制路由访问操作的(续),上一篇文章我们已经介绍过一部份该相关内容,​​在本文,我们可以判断当前路由地址是否为调试地址,让评估返回真,需要的小伙伴可以参考一下
    2022-02-02
  • .NET Core 中对象池 Object Pool的使用

    .NET Core 中对象池 Object Pool的使用

    这篇文章主要介绍了 .NET Core 中对象池 Object Pool的使用,对象池简单来说就是一种为对象提供可复用能力的软件设计思路,对象池最常用的场景是游戏设计,因为在游戏中大量存在着可复用的对象,源源不断的子弹出现并不是循环再生的,下面一起进入文章了解具体内容吧
    2021-11-11
  • NAT网络地址转换详情

    NAT网络地址转换详情

    这篇文章主要以NAT作用和NAT的应用方向及网络配置等多个知识点描述网络地址转换的过程,需要的朋友可以参考下面文章
    2021-08-08
  • .NET 6新特性试用Timer类之PeriodicTimer 

    .NET 6新特性试用Timer类之PeriodicTimer 

    这篇文章主要介绍了.NET 6新特性试用Timer类之PeriodicTimer,PeriodicTimer与其他Timer需要创建事件回调不同,下,下面文章详细介绍PeriodicTimer的使用方式,需要的朋友可以参考一下
    2022-02-02
  • ASP.NET Core如何注入多个服务实现类

    ASP.NET Core如何注入多个服务实现类

    这篇文章主要介绍了ASP.NET Core如何注入多个服务实现类的相关资料,需要的朋友可以参考下面文章的具体内容
    2021-09-09
  • .NET 6 中的隐式命名空间引用

    .NET 6 中的隐式命名空间引用

    这篇文章小编主要向大家介绍的是介绍了.NET 6 中的隐式命名空间引用,其正式版发布之前会专注于各种测试和 BUG 修复,下面就由小编来详细介绍吧,感兴趣的小伙伴可以参考下文
    2021-09-09
  • ASP.NET Web API教程 创建Admin视图详细介绍

    ASP.NET Web API教程 创建Admin视图详细介绍

    现在我们转入客户端,并添加一个能够使用从Admin控制器而来的数据的页面。通过给控制器发送AJAX请求的方式,该页面将允许用户创建、编辑,或删除产品
    2012-11-11

最新评论