【问题标题】:angularjs post error -405 (Method Not Allowed)angularjs发布错误-405(不允许方法)
【发布时间】:2015-08-25 08:39:38
【问题描述】:

我有一个 menubar.cshtml 作为局部视图,其中有一个名为 navAllIssues 的菜单项。单击它时,我正在调用名为 IssuesController 的 angularjs 控制器的 GetUserProjects() 方法。但我得到 405(未找到方法错误)。

错误图片

menubar.cshtml

<li id="navAllIssues" data-ng-controller="allIssuesController">
                         <a class="auto hideover" data-ng-click="GetUserProjects()">
                             <span class="pull-right text-muted">
                                 <i class="i i-circle-sm-o text"></i>
                                 <i class="i i-circle-sm text-active"></i>
                             </span>
                             <i class="i i-file-copy i-2x icon"></i>
                             <span class="font-bold">All Issues</span>
                         </a>

                     </li>

问题控制器.js

 $scope.GetUserProjects = function() {
    //var isMobileView = false;
    //$scope.issueCount = -1;
    alert('test1');
    $scope.issuesLoaded = false;
    $scope.issueDetailsLoaded = false;
    var windowWidth = $(window).width();
    if (windowWidth < 768) {
        isProjectSelected = false;
        $("#projectContainer").show();
        $("#email-content").hide();
        $("#issueContainer").hide();
        selectedTab = "project";
    }
    $("#busyIndicator").show();
    $scope.query = "";
    var url = 'api/Issues' + '/GetUserProjects/';
    $http.post(url, []).success(function(data, status, headers, config) {
        if (data != '' || data.length == 0) {
            if (data != '' || data.length == 0) {
                $scope.Projects = data;
                $scope.projectIssuesStatus = $scope.Projects.ProjectIssues;
                $scope.Projects = $filter('orderBy')($scope.Projects, 'Name');
                alert("test--"+$scope.Projects[0].Name);
                if ($scope.selectedProject == null) {
                    $scope.selectedProject = $scope.Projects[0];
                    $scope.target = $scope.selectedProject.ID;
                    if ($location.search().Project != undefined) {
                        $scope.target = $location.search().Project;
                        for (var countp = 0; countp < $scope.Projects.length; countp++) {
                            if ($scope.Projects[countp].ID == $scope.target) {
                                $scope.selectedProject = $scope.Projects[countp];
                            }
                        }
                    }
                } else {
                    for (var count = 0; count < $scope.Projects.length; count++) {
                        if ($scope.Projects[count].Id == $scope.selectedProject) {
                            $scope.selectedProject = $scope.Projects[count];
                        }
                    }
                }
                if ($scope.selectedProject.MyIssueCount > 0 || $scope.selectedProject.OpenIssueCount > 0) {
                    $scope.showIssues($scope.selectedProject);
                }
                //                    if (!isMobileView) {
                //                        $scope.showIssues($scope.Projects[0]);
                //                    }


            } else {
                $scope.selectedProject = null;
            }

        } else {
            $scope.errors.push(data.error);
        }
    });
    if ($scope.isVisible == false) {
        $("#changedetailsbox").hide();
        $scope.isVisible = true;
    }
    if ($scope.isVisibleReply == false) {
        $("#postReplybox").hide();
        $scope.isVisibleReply = true;
    }
};

API 控制器

 [HttpPost]
    [AuthenticationRequired]
    public List<ProjectBO> GetUserProjects()
    {
        var userId = SessionItems.UserId;
        var result = BLL.PublicLayer.GetUserProjects(userId);
        return result.IsSuccessful ? result.Result : new List<ProjectBO>();
    }

【问题讨论】:

    标签: javascript asp.net-mvc angularjs http-post


    【解决方案1】:

    Method not allowed 错误通常意味着不允许使用 HTTP 方法(GET、POST、PUT 或 DELETE)。您的服务设置是否允许 POSTS?你能发布你的服务器端代码吗?

    【讨论】:

    • 请检查我也发布了我的 api 控制器代码
    【解决方案2】:

    使用绝对 url 来调用 api,之前我使用的是相对 url,因为它得到了 405(method not found) 错误。

    通过绝对网址调用的代码

    var url =  window.location.protocol + '//' + window.location.host + '/api/Issues' + '/GetUserProjects/';
    

    【讨论】:

      【解决方案3】:

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

      移除 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 路由

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

      【讨论】:

        猜你喜欢
        • 2019-07-29
        • 2017-08-16
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 2016-12-03
        • 2016-05-15
        • 1970-01-01
        • 2017-11-13
        相关资源
        最近更新 更多