700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > ASP.NET Core MVC 项目 WebApi与MinimalApi 跨域问题解决方案

ASP.NET Core MVC 项目 WebApi与MinimalApi 跨域问题解决方案

时间:2023-08-22 23:18:59

相关推荐

ASP.NET Core MVC 项目 WebApi与MinimalApi 跨域问题解决方案

目录

一:跨域问题的由来

二:服务端允许跨域

一:使用HttpContext允许跨域请求

二:使用扩展特性允许跨域请求

三:使用管道中间件允许跨域请求

一:跨域问题的由来

跨域问题其实是浏览器所限定的,同源策略,由NetScape提出的一个著名的安全策略。所谓的同源,指的是协议、域名、端口相同。浏览器处于安全方面的考虑,只允许本域名下的接口交互,不同源的客户端脚本,在没有明确授权的情况下,浏览器认为这个资源不安全,不能用。

二:服务端允许跨域

一:使用HttpContext允许跨域请求

/// <summary>/// Get请求/// 获取数据/// </summary>/// <returns></returns>[HttpGet]public object GetData(){//服务端允许跨域HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");return new{Id = 123,Name = "VinCente"};}

二:使用扩展特性允许跨域请求

using Microsoft.AspNetCore.Mvc.Filters;namespace _Core_MVC.WebApi.Utility{public class CustomCorsActionFilterAttribute : Attribute, IActionFilter{//使用扩展特性允许跨域请求public void OnActionExecuting(ActionExecutingContext context){context.HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");}public void OnActionExecuted(ActionExecutedContext context){throw new NotImplementedException();}}}

在控制器中应用

/// <summary>/// Get请求/// 获取数据/// </summary>/// <returns></returns>[HttpGet][CustomCorsActionFilter]public object GetData(){//服务端允许跨域//HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");return new{Id = 123,Name = "VinCente"};}

三:使用管道中间件允许跨域请求

//表示整个应用程序,调用CreateBuilder方法创建一个WebApplicationBuilder对象var builder = WebApplication.CreateBuilder(args);//向管道容器添加注册中间件//添加注册Controller中间件//添加注册Swagger中间件builder.Services.AddControllers();builder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen();//添加注册允许跨域请求builder.Services.AddCors(policy =>{policy.AddPolicy("CorsPolicy", option => option.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().WithExposedHeaders("X-Pagination"));});//配置管道容器中间件,构造WebApplication实例var app = builder.Build();//配置HTTP请求管道判断开发者模式if (app.Environment.IsDevelopment()){app.UseSwagger();app.UseSwaggerUI();}//向管道添加用于将HTTP请求重定向到HTTPS的中间件app.UseHttpsRedirection();//向管道添加用于身份鉴权授权中间件app.UseAuthorization();//向管道添加用于Controller中间件app.MapControllers();//向管道添加用于允许跨域请求的中间件app.UseCors("CorsPolicy");//向管道添加启动应用程序中间件app.Run();

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。