【问题标题】:Getting 405 error in angularjs post method在 angularjs post 方法中出现 405 错误
【发布时间】:2016-05-22 02:56:09
【问题描述】:

我已尝试在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”标头。来源“本地主机”;因此不允许访问。响应的 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"}

【问题讨论】:

  • 您是否尝试在服务器端添加访问权限以允许来源(针对请求)?
  • 您确定您的“example.com” uri 接受 POST -Data 吗? 405 表示“方法不允许”,也许他们只接受 GET/PUT?您是否分析了响应标头?它应该说明,允许哪些方法
  • @kfis POST 方法允许在服务器上使用,但我无法从服务器获得任何响应。我在控制台中收到此消息`XMLHttpRequest 无法加载example.com/api/login。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'localhost'。响应的 HTTP 状态代码为 405。`
  • @V31 是否可以强制 Angular 进行跨域请求,即使服务器中未设置对 allow-origins 的访问权限?
  • 你可以试试dataType: "jsonp",

标签: javascript angularjs grails cors


【解决方案1】:

您的 Angular 应用程序和您的后端 grails api 不在同一个域中。所以当你从 Angular 到 grails 后端进行 api 调用时,它实际上是一个跨域 ajax 调用。除非您已相应地配置您的应用程序,否则您不能进行跨域 ajax 调用。

cors plugin - 它会帮助你支持cors。

【讨论】:

    【解决方案2】:

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

    删除 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("", "", "*"); config.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;
        }
    

    【讨论】:

      猜你喜欢
      • 2017-09-09
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2014-12-04
      • 2015-02-07
      • 2017-02-02
      • 2016-05-15
      • 2017-11-20
      相关资源
      最近更新 更多