2015-06-10 3 views
0

У меня есть menubar.cshtml как частичный вид, в котором у меня есть пункт меню с именем navAllIssues. На его клике я вызываю метод GetUserProjects() моего контроллера angularjs с именем ProblemController. Но я получаю 405 (метод не найден ошибкой).angularjs post error -405 (Метод не разрешен)

изображения Ошибка

enter image description here

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> 

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

Контроллер Апи

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

ответ

0

Недопустимые ошибки метода часто означают, что метод HTTP (GET, POST, PUT или DELETE) недопустим. Устанавливает ли ваша служба настройки POSTS? Не могли бы вы отправить свой серверный код?

+0

пожалуйста, проверьте, я отправил свой код контроллера апи слишком – rupinder18

0

Используйте абсолютный url для вызова api, раньше я использовал относительный url, из-за которого получалась ошибка 405 (метод не найден).

код для вызова по абсолютному адресу

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

я столкнулся с аналогичной проблемой, после долгих исследований я нашел простое решение, которое работает для меня.

удалить все настройки, связанные с Корс в web.config

как

<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 маршруты

вар cors = new EnableCorsAttribute ("", "", "*"); config.EnableCors (cors);

и ваш пост запрос от углового

Factory.postData = function (data) { 
     var request = $http({ 
      method: "POST", 
      url: urlBase+'api/url', 
      data: data, 
      headers: { 
       "Content-Type": "application/json" 
      } 
     }); 
     return request; 
    } 
Смежные вопросы