Asp.Net Core WebAPI 跨域处理

一、Core WebAPI中的跨域处理

  1. 在使用WebAPI项目的时候基本上都会用到跨域处理
  2. Core WebAPI的项目中自带了跨域Cors的处理,不需要单独添加程序包


    自带了跨域Cors的处理

使用实例

  1. 全局配置中启用跨域处理,命名为‘any’,任何都可以访问
    在Startup.cs中添加配置
public void ConfigureServices(IServiceCollection services)
{
    //配置跨域处理
    services.AddCors(options =>
    {
        options.AddPolicy("any", builder =>
        {
            builder.AllowAnyOrigin() //允许任何来源的主机访问
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials();//指定处理cookie
        });
    });
}
  1. 在控制器或Action的方法注释上使用对应名称的 跨域规则[EnableCors("any")]
 [Route("api/[controller]")]
    [ApiController]
    [EnableCors("any")] //设置跨域处理的 代理
    public class UserController : ControllerBase
    {
         // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<User>> Get()
        {
            Conn mysqlGet = new Conn();
            return mysqlGet.UserList();
        }
    }

注:如果在控制器上指定,则控制器内 所有的Action都有对应的跨域限制。

三 、跨域时,Cookie的访问

  1. 后台通过HttpContext上下文可以直接操作Cookie
[Produces("application/json")]
[Route("api/CookieOne")]
[EnableCors("any")]
public class CookieOneController : Controller
{
    //后台设置Cookie 
    [HttpPut]
    public IActionResult Add()
    {
        ControllerContext.HttpContext.Response.Cookies.Append("name", "中文 ,张三丰");
        return Ok(new { msg = "设置成功" });
    }

    //后台获取Cookie,特别 说明对于基础类型的返回值,默认JQuery的ajax解析失败,最好返回IActionResult 
    [HttpGet]
    public IActionResult Get()
    {
        string result = HttpContext.Request.Cookies["url"];
        return Content(result);
    }
}
  1. 前台JQuery的ajax请求,需要携带withCredentials才会将cookie的值保存到客户端
var example1 = new Vue({
    el: '#example1',
    data: {
        name: '空',
        url: '空'
    }
});
//1.后台添加cookie
function addOne() {
    $.ajax({
        url: urlHelper.getApi('cookieone'),
        type: 'put',
        xhrFields: {
            withCredentials:true //配置http跨域请求中携带cookie
        },
        success: function (data) {
            console.info(data);
            //前台获取cookie
            var name = Cookies.get('name');
            console.info(name);
            example1.name = name; //Vue中修改双向绑定可以通过Vue实例进行,不需要再次通知页面(和AngularJs不同)
        }
    });
}
addOne();
//2.前台添加Cookie 后台获取
function getOne()
{
    Cookies.set('url', 'http://www.gongjuji.net/');


    $.ajax({
        url: urlHelper.getApi('cookieone'),
        type: 'get',
        contentType: 'application/json',
        xhrFields: {
            withCredentials: true //配置http跨域请求中携带cookie
        },
        success: function (data) {
            console.info(data);
            example1.url = data;
        }
    });
}
getOne();
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,864评论 1 92
  • 本文翻译自Enabling Cross-Origin Requests in ASP.NET Web API 2 ...
    凌雲木阅读 10,318评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,348评论 19 139
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    他方l阅读 1,128评论 0 2
  • 什么是跨域 只要是协议、域名、端口有任意一个不同的url都是不同的域。协议指的是http或者https协议。域名就...
    dogLin阅读 14,015评论 0 8

友情链接更多精彩内容