.Net Core 3.1 CORS跨域处理

**

.net core3.1 CORS跨域处理

**
.net core3.1是一个LTS版本,这里我们新建一个core3.1的API项目,目录结构如下:
在这里插入图片描述
这里序列化使用了Newtonsoft.Json
UserController.cs

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using test.Models;

namespace test.Controllers
{
    [ApiController]
    [Route("[controller]")] 
    public class UserController : Controller
    {
        [HttpGet]
        public ContentResult Index()
        {
            List<User> users = new List<User>();
            users.Add(new User(1, "测试1", 28, "男"));
            users.Add(new User(2, "测试2", 25, "女"));
            users.Add(new User(3, "测试3", 22, "女"));
            List<Order> orders = new List<Order>();
            orders.Add(new Order(0001,"电脑"));
            orders.Add(new Order(0002, "手机"));
            Hashtable result = new Hashtable();
            result.Add("user", users);
            result.Add("order", orders);
            return Content(JsonConvert.SerializeObject(result));
        }
    }
}

Order.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace test.Models
{
    public class Order
    {
        public int OrderId { get; set; }
        public string Product { get; set; }
        public Order(int OrderId, string Product)
        {
            this.OrderId = OrderId;
            this.Product = Product;
        }
    }
}

User.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace test.Models
{
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Gender { get; set; }

        public User(int Id, string Name, int Age, string Gender)
        {
            this.Id = Id;
            this.Name = Name;
            this.Age = Age;
            this.Gender = Gender;
        }
    }
}

实现跨域需要修改Program.cs和Startup.cs两个文件
Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace test
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>().
                    //使用*可以在URL用IP访问,默认使用localhost
                    UseUrls("http://*:5000;https://*:5001");
                });
    }
}

Startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace test
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            //跨域设置
            services.AddCors(options => {
                options.AddPolicy("any", builder =>
                {
                    builder.WithOrigins("*");
                });
            });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();
			//跨域配置,app.UseCors()需要置于app.UseRouting()和app.UseEndpoints之间
            app.UseCors("any");

            app.UseAuthorization();

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

这里我们使用Kestrel启动
用PostMan测试https://主机的IP:5001/User显示实现了跨域处理:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值