.NET 允许跨域的两种方式实现(IIS 配置、C# 代码实现)

前言

当把开发好的 WebApi 接口,部署到 Windows 服务器 IIS 后,postman 可以直接访问到接口并正确返回,这并不意味着任务完成,毕竟接口嘛是要有交互的,最常见的问题莫过于跨域了。

若前端文件是在当前接口文件下的 wwwroot 文件夹下,那么接口的访问就没问题,因为是同协议(http、https)、同地址(域名)、同端口,不存在跨域问题。

但是,若前端和接口不是部署在一起的,那么一般都会存在跨域问题,本文将通过两种方式介绍如何使接口允许跨域请求。

一. IIS 配置实现

1. 生效范围

1 位置为 IIS 根目录,在此属性中配置“HTTP响应标头”时,作用域为“网站”下级目录中的全部应用。若后面修改了单个应用的 Headers,当更新应用文件后,修改会被还原。

2 位置是指定某一网站,在此属性中配置“HTTP响应标头”时,作用域为当前应用,不对其他同级应用有影响。需要注意的是,在项目文件夹更新后,单独配置的响应头信息将会消失。
在这里插入图片描述

2. 常用的配置项共有四个
在这里插入图片描述

二、C# 代码实现

1. 配置示例

主要是通过在 Startup.cs 文件中的 ConfigureServices() 方法添加跨域服务策略(services.AddCors()),然后在 Configure() 方法中将跨域策略加入到 HTTP 请求管道(HTTP request pipeline)中。

先列举一个实例,.Net 6.0 配置兼容预检请求,如下代码:

public void ConfigureServices(IServiceCollection services)
{
   
    // ...
    // 添加跨域策略
    services.AddCors(options =>
    {
   
        // 配置默认策略和中间件:options.AddDefaultPolicy(policy =>{policy.WithOrigins("");});app.UseCors(); // 将自动应用于所有控制器终结点
        options.AddPolicy("CorsPolicyName0519", policy =>
        {
   
            policy
            //.AllowAnyOrigin() // AllowAnyOrigin 允许任何源地址的访问
            .WithOrigins("http://IP:Port") // 仅允许一个地址访问
            //.WithOrigins("http://IP:Port","http://IP1:Port1","http://IP2:Port2") // 允许多个地址访问,英文逗号分隔
            //.WithOrigins(new string[]{"http://IP1:Port1","http://IP2:Port2","http://IP3:Port3"}) // 支持同时允许多个指定地址的访问
            //.AllowAnyHeader() // 允许任何的Header头部标题
            .WithHeaders("Account", "ClientType", "OrgId", "Token", "Department", "EntAuthVebr") // 自定义请求头
            //.AllowAnyMethod() // 允许任何方法
            .WithMethods(HttpMethods.Options, HttpMethods.Get, HttpMethods.Post, HttpMethods.Put, HttpMethods.Delete) // 允许的谓词方法
            //.AllowCredentials() // 允许跨源请求发送凭据 允许时 Origin 不允许为“*”
            .SetPreflightMaxAge(TimeSpan.FromHours(24)); // 设置预检请求的最大缓存时间
        });
    });
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   
    // ...
    app.UseCors("CorsPolicyName0519"); // 添加 CORS 中间件,允许跨域访问
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值