【问题标题】:http request with javascript/ajax No 'Access-Control-Allow-Origin'带有 javascript/ajax 的 http 请求没有 'Access-Control-Allow-Origin'
【发布时间】:2018-12-16 13:33:22
【问题描述】:

我正在运行 asp.net c#,我试图从服务器上使用端口 9192 获取在客户端上运行的应用程序的状态。 为了解决这个问题,我调用了下面的 ajax get 调用。我的客户端都是vpn连接到服务器所以我使用客户端的vpn ip

但是我从控制台收到以下错误

XMLHttpRequest 无法加载 http://clientIP:9192/omxcmd?cmd=position。 请求中不存在“Access-Control-Allow-Origin”标头 资源。 Origin 'http://[my server name]:81' 因此是不允许的 访问。

我已经尝试从这里HTTP GET request in JavaScript?进行纯javascript调用

同样的错误 我还在我的 web.config 文件中添加了以下内容,它应该给我跨域调用,但这并没有产生任何影响。

 <httpProtocol>
        <customHeaders>
            <!-- Enable Cross Domain AJAX calls -->
            <remove name="Access-Control-Allow-Origin" />
            <add name="Access-Control-Allow-Origin" value="*" />
        </customHeaders>
    </httpProtocol>

下面是我从我的 aspx 页面调用的 ajax 调用

    $.ajax({
    url: "http://VPNIPofCLIENT:9192/omxcmd?cmd=position",
    type: "GET",
    crossDomain: true,
    dataType: "json",
    success: function (response) {
        var resp = JSON.parse(response)
        alert(resp.status);
    },
    error: function (xhr, status) {
        alert("error");
    }
});     

我还在客户端使用 chromium-browser --disable-web-security 启动了 chromium 浏览器,没有任何乐趣

使用“http://localhost:9192/omxcmd?cmd=position”会返回正确的字符串,因此它可以正常工作

【问题讨论】:

  • 让服务器使用 HTTP 调用客户端似乎有点奇怪。通常情况正好相反,这使得谈论客户端/服务器关系变得更加困难。目前尚不清楚您的 ajax 调用发生在哪里。如果它来自客户端上运行的应用程序,则不会出现该错误,因为应用程序会调用自身,但如果它来自服务器上运行的应用程序,则不会使用localhost,因为将环回服务器,而不是客户端。
  • 你正确的 localhost 是错误的我是(问题已编辑)我使用的是客户端的 ip 地址
  • 我只需要检查一个播放器是否在客户端上运行(它是一个 kiosk 类型的设置),唯一的方法是在端口 9192 上用作对客户端的 http 请求跨度>

标签: javascript c# jquery ajax http


【解决方案1】:

我曾经遇到过同样的问题,我用我解释的一种方式解决了..

首先你需要在你的 web api 服务器端启用 cors..

首先你需要安装

Install-Package Microsoft.AspNet.WebApi.Cors

在您的 webapi 项目的 Nuget 包管理器控制台中..

然后在你的 web api 项目 WebConfig.cs 文件中再添加两行

public static void register(HttpConfiguration config){
     EnableCorsAttribute cors=new EnableCorsAttribute("your-client-localhost-url-with-port","your-webapi-localhost-port","any-methods");
     config.EnableCors(cors); 
}


for example :
 EnableCorsAttribute cors = new
 EnableCorsAttribute("http://localhost:8080","http://localhost:1995");
//only allowed given local host

 EnableCorsAttribute cors = new 
 EnableCorsAttribute("*","*","*"); //allow all applications to access web api

希望对你有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 2018-03-28
    • 2015-07-03
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2017-02-07
    相关资源
    最近更新 更多