前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【愚公系列】2023年07月 .NET CORE工具案例-GraphQL.Server(Cors跨域配置)

【愚公系列】2023年07月 .NET CORE工具案例-GraphQL.Server(Cors跨域配置)

作者头像
愚公搬代码
发布于 2025-05-28 08:25:17
发布于 2025-05-28 08:25:17
7100
代码可运行
举报
文章被收录于专栏:历史专栏历史专栏
运行总次数:0
代码可运行

前言

CORS(Cross-Origin Resource Sharing)是一种机制,允许在浏览器中运行的Web应用程序访问不同源的资源。不同源是指URI(通常是协议,域名和端口)与执行当前代码的文档不同。CORS为Web开发人员提供了一种安全的方式来在Web浏览器中使用跨域资源,同时保护用户的隐私和数据安全。它通过在HTTP头中添加特定的响应头来实现,允许服务器指定哪些域名或IP地址可以访问其资源。

一、Cors跨域配置

1.安装包

在.NET Core中设置CORS以允许跨域访问GraphQL服务器,您可以遵循以下步骤:

在.NET Core Web应用程序中安装Microsoft.AspNetCore.Cors软件包。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Install-Package Microsoft.AspNetCore.Cors

Startup.cs文件中,将CORS服务添加到应用程序的服务集合中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Cors;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader());
        });
        
        // 在此添加其他服务
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();

        app.UseCors("CorsPolicy"); // 添加CORS中间件

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

在上面的代码中,我们在ConfigureServices方法中添加了一个CORS策略,并将其命名为CorsPolicy。在Configure方法中,我们将CORS中间件添加到应用程序的请求管道中。

值得注意的是,AllowAnyOrigin()会允许任何来源的跨域请求,这是不安全的,更好的做法是指定允许访问的域,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
options.AddPolicy("CorsPolicy",
    builder => builder.WithOrigins("http://example.com")
    .AllowAnyMethod()
    .AllowAnyHeader());

在GraphQL控制器上启用CORS。

假设您的GraphQL控制器名称为GraphQLController,则需要在该控制器类上应用[EnableCors]特性,以启用CORS。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Cors;

[EnableCors("CorsPolicy")]
[Route("[controller]")]
[ApiController]
public class GraphQLController : ControllerBase
{
    // 在此添加GraphQL相关的操作
}

在上面的代码中,我们将EnableCors特性应用到GraphQLController控制器类上,并指定名称为CorsPolicy的CORS策略。

2.使用

在GraphQL.Server中的使用代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using GraphQL;
using Chat = GraphQL.Samples.Schemas.Chat;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSingleton<Chat.IChat, Chat.Chat>();
builder.Services.AddGraphQL(b => b
    .AddAutoSchema<Chat.Query>(s => s
        .WithMutation<Chat.Mutation>()
        .WithSubscription<Chat.Subscription>())
    .AddSystemTextJson());
builder.Services.AddRouting();
builder.Services.AddCors(options =>
{
    options.AddPolicy("MyCorsPolicy", b =>
    {
        b.AllowCredentials();
        b.WithOrigins("https://localhost:5001");
    });
});

var app = builder.Build();
app.UseDeveloperExceptionPage();
app.UseWebSockets();
app.UseRouting();
app.UseCors();
app.UseEndpoints(endpoints =>
{
    // configure the graphql endpoint at "/graphql"
    endpoints.MapGraphQL("/graphql")
        .RequireCors("MyCorsPolicy");
    // configure Playground at "/"
    endpoints.MapGraphQLPlayground("/");
});
await app.RunAsync();
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、Cors跨域配置
    • 1.安装包
    • 2.使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档