angularjs post方法中得到405错误

Getting 405 error in angularjs post method

本文关键字:错误 post 方法 angularjs      更新时间:2023-09-26

我已经尝试在stackoverflow中接受这个问题的答案。在angularjs中,当我向本地Api发送post请求时,它可以工作。但当我更改为跨域api时,它不工作。

这是我的代码

 var myapp = angular.module('myApp',['ngRoute','http-auth-interceptor'])
    .config(['$httpProvider', function($httpProvider) {
        $httpProvider.defaults.useXDomain = true;
        delete $httpProvider.defaults.headers.common['X-Requested-With'];
    }])
     .factory('featuresData', function ($http) {
        return{          
            doCrossDomainGet: function(data) {
                return $http({
                    url:'http://example.com/api/login',
                     type: "POST",
        crossDomain: true,
        data: JSON.stringify({"username":"test_teacher" , "password":"123"}),
        contentType:  'application/json; charset=utf-8',
        dataType: "json",
        success: function (response) {
            console.log(response);

        },
        error: function (xhr, status) {
            alert("error");
        }
                })
            }        
        }
});

我在控制台中收到以下消息:

XMLHttpRequest无法加载example.com/api/login。请求的资源上不存在"Access Control Allow Origin"标头。原点"localhost";因此不允许访问。响应的HTTP状态代码为405。

Api在Android,Ios客户端应用程序和CURL 中运行良好

curl command 

curl -X POST -H "Accept: Application/json" -H "Content-Type: application/json" http://example.com/api/login -d '{"username":"test_teacher","password":"123"}'

curl output
{"username":"test_teacher","roles":["ROLE_TEACHER"],"access_token":"7q8dcreo5bngk32jq8nmefrfgp6nope2"}

您的angular应用程序和后端grails api不在同一个域上。因此,当您从angular到grails后端进行api调用时,它实际上是一个跨域的ajax调用。除非您相应地配置了应用程序,否则您无法进行跨域ajax调用。

查看cors插件-它将帮助您支持cors。

我遇到了类似的问题,经过长期的研究,我找到了一个简单的解决方案

删除web.config 中所有与CORS相关的设置

 <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>

只需在WebAPIconfig.cs 中添加这两行即可

// Web API routes

var cors=new EnableCorsAttribute("",""、"*");配置。EnableCors(cors);

以及您从angular 的帖子请求

 Factory.postData = function (data) {
        var request = $http({
            method: "POST",
            url: urlBase+'api/url',
            data: data,
            headers: {
                "Content-Type": "application/json"
            }
        });
        return request;
    }