2014-10-20 2 views
2

Я пытаюсь использовать Web Api для отправки/получения данных с сервера. WebApiConfig.cs:Ошибка Web Api 404 Ресурс не найден

config.MapHttpAttributeRoutes(); 

    config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "{controller}/{action}" 
     ); 

RouteConfig.cs:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
          name: "Default", 
          url: "{controller}/{action}/{id}", 
          defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
        ); 
    } 

Globa.asax.cs:

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 

    } 

Апи контроллер (ServicesController.cs):

public class ServicesController : ApiController 
{ 

    public List<TreeMenuItem> LoadMetadata() 
    { 
     List<TreeMenuItem> itemsMenu = new List<TreeMenuItem>(); 
     TreeMenuItem dataSource = new TreeMenuItem("1", "DataSources", null); 
     itemsMenu.Add(dataSource); 
     return itemsMenu; 
    } 
} 

Я пытаюсь апи доступ из контроллера angularJS как ниже:

angular.module("App", ["ngRoute", "ngResource"]) 
.controller('MainController', ["$scope", "$http", MainController]); 

function MainController($scope, $http) { 
var baseUrl = "Services/LoadMetadata"; 
var params = {}; 
$http.post(baseUrl, params) 
    .then(function (data) { 
     $scope.roleList = data.data; 
}); 
} 

Я получаю ошибку 404 на $ http.post для "Услуги/LoadMetadata"! Я пробовал какую-то версию с использованием маршрута - та же ошибка 404. Любая помощь?

+0

попробуйте зарегистрировать webapi до регистрации маршрута – harishr

+0

отлично. Теперь все в порядке. :-). – BogdanIM

+0

К сожалению, я не могу отметить ответ на ваш комментарий. – BogdanIM

ответ

1

изменить последовательность регистрации ...

GlobalConfiguration.Configure(WebApiConfig.Register); 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 

регистр веб-апи-конфигурации перед тем маршрутной конфигурации, потому что я думаю, маршрут-конфиг вмешиваются с веб-API-конфигурации ...

также, пожалуйста, рассмотрите стандартную практику использования всех ваших api-вызовов с префиксом api.

config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{action}" 
    ); 
+0

Хорошо, спасибо Хариш. – BogdanIM

+0

У меня недостаточно очков репутации :-p – BogdanIM

+0

Ничего себе, что случилось: -) .... – BogdanIM

Смежные вопросы