简体   繁体   中英

Angularjs in Asp.net MVC project calling web api controller

I am working on a project that use ASP.NET MVC, AngularJs and WebApi 2.0. I am calling a web api controller from angularjs. I must create the first web api controller. So I updated the start_application in the global.asax , adding the following code:

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

Then I created the first web api controller (first time I created it inside the folder controller but it did not work and I thought it was going in conflict with mvc routing, so I created a folder WebApi\\Controllers ):

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

I have created a factory in angularjs:

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

And the i call the service in an angular controller:

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

I obtain the following error:

angular.js:9818 GET http://localhost:50407/api/Countries 404 (Not Found)

The order I configure the routing is very important... My configuration was

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

It must become as following

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM