对预检请求的响应未通过访问控制检查:否'Access-Control-Allow-Origin'

时间:2016-01-05 18:09:45

标签: c# asp.net ajax web-services

这里我在asp.net中使用java rest webservices,而在asp.net中调用服务我使用ajax来调用webservice,下面是我使用过的代码

 $.ajax({
            type: "POST",
            url: 'http://localhost:9090/EmployeeService/employee/create',


            data: { id: 4, first_name:"narayan", last_name:"phone", email:"phone", phone:4545454545 },
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: OnSuccessCall,
            error: OnErrorCall
        });

当我运行时,我得到错误,如下所示

  

XMLHttpRequest无法加载http://localhost:9090/EmployeeService/employee/create。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:64992”访问。

我搜索了这个主题我发现许多答案说我必须为个别请求添加自定义标题(或标题集)并向我显示如下代码

$.ajax({
url: 'foo/bar',
headers: { 'x-my-custom-header': 'some value' }
});

$.ajaxSetup({
headers: { 'x-my-custom-header': 'some value' }
});

// Sends your custom header
$.ajax({ url: 'foo/bar' });

// Overwrites the default header with a new header
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' }     }); 

这里我应该根据我的代码替换'x-some-other-header'和“some value”。这是解决此错误的正确方法或者其他解决方案是什么?。请指导我,我是非常新的asp.net。

2 个答案:

答案 0 :(得分:0)

您是否故意尝试向其他域提交请求?除非您将其设置为静态,否则应用程序端口(" localhost:")往往会发生变化。似乎端口号已更改为64992而不是9090

答案 1 :(得分:0)

我通过在服务器端提供对跨域的访问来解决它。由于服务是使用maven在java中编写的,我通过在web.xml页面中添加这些过滤器来支持跨域

      <filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
     </filter>
  <filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

通过在web.xml中添加这些,我能够解决错误。