2016-10-03 71 views
0

我正在使用ASP.NET MVC,AngularJs和WebApi 2.0的项目。 我正在从angularjs调用web api控制器。我必须创建第一个Web API控制器。 所以我更新了global.asax的start_application,加入如下代码:Angularjs在Asp.net MVC项目调用Web API控制器

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

然后,我创建了第一个Web API控制器(我第一次创建的文件夹controller内,但它没有工作,我认为这是要与MVC路由冲突,所以我创建了一个文件夹WebApi\Controllers):我在angularjs创造了一个工厂

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

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

和I调用的角度控制器的服务:

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

我得到如下错误:

angular.js:9818 GET http://localhost:50407/api/Countries 404(未找到)

+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); 
相关问题