zoukankan      html  css  js  c++  java
  • 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")]

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

      

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

  • 相关阅读:
    Python 元类
    Rsync 基础配置
    linux shell find
    找最大的目录
    云主机的上下行带宽
    关于c3p0 ResourcePoolException: Attempted to use a closed or broken resource pool
    recover_file
    MegaCli 监控raid状态
    influxdb
    在Ubuntu 16.04如何安装Java使用apt-get的
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/13660401.html
Copyright © 2011-2022 走看看