角度 7 上的 CORS 配置

Posted

技术标签:

【中文标题】角度 7 上的 CORS 配置【英文标题】:CORS config on angular 7 【发布时间】:2019-05-15 19:19:57 【问题描述】:

您好,我一直在努力让CORS 工作。我看到了this post,我认为这让我更接近了,但是,我已经按照该帖子中的链接到angular.io 并使用了它。

所以让我解释一下我的问题,我正在创建代理:

var HttpsProxyAgent = require('https-proxy-agent');
var proxyConfig = [
  context: '/api',
  target: 'http://localhost:3000',
  secure: false
];

function setupForCorporateProxy(proxyConfig) 
  var proxyServer = process.env.http_proxy || process.env.HTTP_PROXY;
  if (proxyServer) 
    var agent = new HttpsProxyAgent(proxyServer);
    console.log('Using corporate proxy server: ' + proxyServer);
    proxyConfig.forEach(function(entry) 
      entry.agent = agent;
    );
  
  return proxyConfig;


module.exports = setupForCorporateProxy(proxyConfig);

我打电话给npm start,脚本看起来像:"start": "ng serve --proxy-config proxy.js"但我正在尝试做一个看起来像这样的帖子:

let url:string='/api/Acounts/Login';

this.http.post(url, body).subscribe(x=> x.doStuff);

我希望它调用http://localhost:3000/Accounts/Login,但它实际上调用http://localhost:42000/api/Accounts/Login

所以我的问题是为什么它调用不正确的地址,我怎样才能让它调用正确的地址?

编辑: 我也想加protractor.conf.js

const  SpecReporter  = require('jasmine-spec-reporter');

exports.config = 
  allScriptsTimeout: 11000,
  specs: [
    './e2e/**/*.e2e-spec.ts'
  ],
  capabilities: 
    'browserName': 'chrome'
  ,
  directConnect: true,
  baseUrl: 'http://localhost:4200/',
  framework: 'jasmine',
  jasmineNodeOpts: 
    showColors: true,
    defaultTimeoutInterval: 30000,
    print: function() 
  ,
  onPrepare() 
    require('ts-node').register(
      project: 'e2e/tsconfig.e2e.json'
    );
    jasmine.getEnv().addReporter(new SpecReporter( spec:  displayStacktrace: true  ));
  
;

【问题讨论】:

***.com/a/46159168/4078143 【参考方案1】:

我已经研究了大约 2 天,我在这里遇到了多个问题。首先是我正在处理的MVC 项目需要一些事情发生。

我需要在WebConfig 文件中添加一些内容:

  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD, OPTIONS" />
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
  </customHeaders>

我需要添加到GlobalApplication.cs 文件中。

   private void GlobalApplication_PreRequestHandlerExecute(object sender, EventArgs e)
    
  #if DEBUG
        if (Request.HttpMethod == "OPTIONS")
        
            Response.StatusCode = 200;
            Response.End();
            return;
        
  #endif
    

希望这对其他人有所帮助!

【讨论】:

这是我最近在使用 Vue 应用程序时也遇到的问题。我们的网络服务器设置略有不同,但您可能还需要处理以下情况。我在 nginx 服务器上遇到了这些问题:我必须为所有 OPTIONS 预检请求手动指定 204 响应。我还发现我的原始标头没有考虑 4xx 响应,并且必须确保它始终被设置(NGINX 有一个 always 标志)。希望这会有所帮助,但可能与您的具体情况无关。 谢谢!我还没有注意到任何东西,但我会记住这一点。

以上是关于角度 7 上的 CORS 配置的主要内容,如果未能解决你的问题,请参考以下文章

在角度应用程序中使用 SignalR Core 时出现 CORS 错误

Cors 政策角度

为啥我在角度请求中收到此错误? (CORS)

由于CORS政策,谷歌oAuth的角度请求失败

由于CORS,角度授权不起作用[重复]

角度拦截器和 CORS