Ajax响应预检请求未通过访问控制

4

我已经找了大约5个小时,但我放弃了。我的Ajax GET请求就是不想工作。

var ApiResponce = $.ajax({
    url: "http://localhost:18428/api/Reservation/" + userid + "?weekNumber=" + weeknr,
    type: 'GET',
    headers: {
        'Authorization': "bearer " + token,  
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Credentials': true,
    },
    dataType: 'json',
    crossDomain: true,
    contentType: "application/json",

    success: function(responce) {
        console.log("success");
        console.log(responce);
    },
    error: function(err) {
      console.log("error");
        console.log(ApiResponce);
    },
});

它连接到一个标准的C# MVC API,但我得到的只是这个错误:

XMLHttpRequest无法加载http://localhost:18428/api/Reservation/1?weekNumber=1。预检请求的响应未通过访问控制检查:所请求的资源上没有'Access-Control-Allow-Origin'头。因此,源'http://localhost'不允许访问。响应的HTTP状态代码为405。


可能是这个问题的重复:https://dev59.com/nVsV5IYBdhLWcg3w8ytf - aggaton
为什么我没想到那个呢?现在为什么会出现这个错误?XMLHttpRequest无法加载http://localhost:18428/api/Reservation/1?weekNumber=1。预检请求的响应中存在无效的HTTP状态码405。 - Nick Assink
1个回答

2
如果您在服务器端使用Apache Tomcat,需要编辑servlet容器上的web.xml文件,并添加以下行:
     <filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
        <init-param>
                <param-name>cors.allowed.origins</param-name>
                <param-value>*</param-value>
        </init-param>
        <init-param>
                <param-name>cors.allowed.methods</param-name>
                <param-value>GET, HEAD, POST, PUT, DELETE, OPTIONS</param-value>
        </init-param>
        <init-param>
                <param-name>cors.exposed.headers</param-name>
                <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials,X-Bonita-API-Token</param-value>
        </init-param>
        <init-param>
                <param-name>cors.allowed.headers</param-name>
                <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,X-Bonita-API-Token</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>CorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

注意:仅适用于Apache Tomcat 7及以上版本,不要忘记重新启动Tomcat。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接