【问题标题】:Cross-Origin Request Blocked for Angular JSAngular JS 的跨域请求被阻止
【发布时间】:2016-05-19 00:36:39
【问题描述】:

我在 Angular JS 中遇到以下错误。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://192.168.1.28:3000/system/organizations/logos/000/000/001/original/img-user.png?1453890721. (Reason: CORS header 'Access-Control-Allow-Origin' missing).

我搜索解决方案,我找到了类似的解决方案

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

上面这段代码,我们需要在-Web.Config中添加

现在,我有一个简单的 Angular 应用程序,我无法理解 Web.config 在哪里以及我应该在哪里创建它?

你能帮我解决一下 - 我应该怎么做?

谢谢,提前。

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

我不确定您提到的建议解决方案是否适用于客户端(角度应用程序)。

您需要在服务器端配置上述解决方案。 对于客户端(从您的浏览器),您可能需要发送一些可以在 Angular 应用程序中配置的属性。您可以在 $httpProvider 的帮助下配置属性。 根据角度 js 文档

使用 $httpProvider 更改 $http 服务的默认行为。 所以我们可以使用这个服务,并且可以设置每个请求都会传递的属性。您很可能需要配置这些设置

这里我在 app.js 主文件中配置它,它定义了我们的应用程序,命名为 app

(function () {
    'use strict';

angular.module('app', []).config(appConfig).run(appRun)

appRun.$inject = ['$rootScope','$location','$state','$stateParams', '$log'];

appConfig.$inject = ['$httpProvider'];

/**
 * To give http $httpProvider default values
 * @param $httpProvider
 */
function appConfig($httpProvider){
    $httpProvider.defaults.useXDomain = true;
    $httpProvider.defaults.withCredentials = true;
    delete $httpProvider.defaults.headers.common["X-Requested-With"];
    $httpProvider.defaults.headers.common["Accept"] = "application/json";
    $httpProvider.defaults.headers.common["Content-Type"] = "application/json";
}


function appRun ($rootScope, $location, $state, $stateParams, $log) {
    console.info('Inside appRun');
}
})();

希望这会有所帮助。 快乐学习:)

【讨论】:

    【解决方案2】:

    文件 web.config 应该是您的服务器应用程序 (ASP.NET) 的一部分,它可以自定义它(服务器)的行为方式。

    Web.config 是 ASP.NET 的主要设置和配置文件 Web应用程序。它是驻留在根目录中的 XML 文档 网站或应用程序的目录,并包含有关如何 Web 应用程序将起作用。

    您在问题中提到的代码告诉服务器应用程序它应该在其响应中包含 Access-Control-Allow-Origin 标头。

    然后您的 Angular 应用程序会接收它并正常处理其余部分。

    请注意,这是一个服务器端解决方案 - 与您的客户端角度脚本无关。

    这里有一个关于web.config的教程。

    【讨论】:

    • 我没有使用 ASP.NET,我有 Ubuntu 系统,我是 ruby​​ on rails 开发人员。这是一个不依赖于 ruby​​ on rails 或 asp.net 的通用 Angular 应用程序。
    • 但是您尝试的解决方案是针对 ASP.NET。请理解,除非响应包含上述标头,否则不支持通过 ajax 访问跨域。您的服务器应将其发送给您的角度以继续该过程。
    • 实际上,我从第三方网站(通过 API)获取图像,我想以 pdf 格式显示该图像(对于 pdf,我使用 pdfmake 进行角度)。
    • 您的第三方站点应该允许您通过 ajax 访问它(发送 Access-Control-Allow-Origin 标头)。或者您必须在您的服务器中创建一个 php 脚本并通过服务器为您访问第三方站点。
    • 我从另一个应用程序获取图像并通过我使用 XMLHttprequest 转换 base64 图像的 IP 端口传递到 angularjs
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2018-10-07
    • 2015-04-24
    • 2019-02-22
    • 2017-09-12
    • 2022-02-16
    • 2021-06-26
    相关资源
    最近更新 更多