• Asp.NetCore Web开发之跨域问题


     在前后端分离的web开发中,解决跨域问题是不可避免的,为什么会出现跨域问题呢,这主要是因为web中的"同源策略",浏览器出于安全原因,不让用户随便访问不同于当前站点的资源,也就是说,不加设置的话,当前域和其它域不能直接的访问,那什么是当前域呢:

        比如当前页面的url是:http://www.test.org,使用ajax访问http://www.test.org/data.aspx,这个属于同域(同源)访问,但是访问https://www.test.org(安全协议),或者http://www.test.org:765(端口)或者http://www.test.com(域名后缀)等等,都是属于跨域,可以这样简单的理解,只要和http://www.test.org不一样开头的url,都是跨域。

        

        解决跨域也很简单,我们需要在Startup.cs中配置跨域服务,允许任何请求头,请求方法,请求来源等等的web请求:

     //配置跨域
    services.AddCors(c => c.AddPolicy("MyCors", a =>
          a.AllowAnyHeader().
              AllowAnyMethod().
              AllowAnyOrigin()));

    上述代码的定义了一个跨域规则,MyCors,这个规则允许任何请求头,请求方法,请求来源,如果要进行单独设置,可以使用with开头的方法,在方法中添加参数,如:

    services.AddCors(c => c.AddPolicy("MyCorsWithGet", a =>
          a.AllowAnyHeader().
              WithMethods("GET").
              AllowAnyOrigin()));

      这样就只允许请求方法为get的请求。

        定义完成以后,还有两步,需要添加中间件,在UseRouting()中间件之后,添加 app.UseCors("MyCors"),可以添加参数,意思是默认使用这个跨域规则,也可以不写,在控制器上指定,这也就是第二步:配置完中间件以后,要在允许跨域的控制上添加[EnableCors]标签,也可以指定使用哪种规则,如[EnableCors("MyCorsWithGet")]

       跨域也可以设置参数,有兴趣的可以查阅文档,理解起来不难。

      

    这是我的公众号二维码,获取最新文章,请关注此号

  • 相关阅读:
    leetcode刷题笔记十四 最长公共前缀 Scala版本
    leetcode刷题笔记十三 罗马数字转数字 Scala版本
    leetcode刷题笔记十二 整数转罗马数字 Scala版本
    Maven 安装与配置
    Maven基础
    java 打jar包配置文件和jar包通级
    java 类
    java 数组
    java 重载
    java 普通项目的配置文件
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/13660401.html
Copyright © 2020-2023  润新知