0

Я работаю над проектом, использующим ASP.NET MVC, AngularJs и WebApi 2.0. Я вызываю контроллер веб-api из angularjs. Я должен создать первый веб-контроллер api. Так что я обновил start_application в global.asax, добавив следующий код:Angularjs in Asp.net MVC project call web api controller

public static void Register(HttpConfiguration config) 
{ 
    // Web API configuration and services 

    // Use camel case for JSON data. 
    //config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 

    // Web API routes 
    config.MapHttpAttributeRoutes(); 

    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 
} 

Затем я создал контроллер первого веб-API (первый раз, когда я создал его в папку controller, но это не сработало, и я думал, что это было собирается в конфликт с MVC маршрутизации, поэтому я создал папку WebApi\Controllers):

[Route("api/Countries")] 
public class CountriesController : ApiController 
{ 
    [HttpGet] 
    public IHttpActionResult GetCountries() 
    { //<-- Here, I put a breakpoint and never go in 
     return Ok(); 
    } 
} 

Я создал фабрику в angularjs:

intranet 
    .factory("countriesService", function ($resource, ENDPOINT) { 
     return { 
      countries: $resource(ENDPOINT + "api/Countries/") 
     }; 
    }); 

И я вызвать службу в угловом контроллере:

$scope.getCountries = function() { 
    new countriesService 
      .countries 
      .query({ }, getCountriesSuccess, getCountriesError); 
}; 

я получаю следующее сообщение об ошибке:

angular.js: 9818 ПОЛУЧИТЬ http://localhost:50407/api/Countries 404 (Not Found)

+0

Да, не найдено ... Я думаю, что это проблема маршрутизации ... или, возможно, проблема с конфигурацией web api – Ciccio

ответ

0

порядке, настроить маршрутизация очень важно ... Моя конфигурация была

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

Он должен стать следующим

AreaRegistration.RegisterAllAreas(); 
GlobalConfiguration.Configure(WebApiConfig.Register); 
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
RouteConfig.RegisterRoutes(RouteTable.Routes); 
BundleConfig.RegisterBundles(BundleTable.Bundles); 
Смежные вопросы