Angularjs在Asp.net MVC项目调用Web API控制器
问题描述:
我正在使用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(未找到)
答
我配置顺序路由是非常重要的...我的配置是
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);
是的,没有找到......我认为这是一个路由问题......或者可能是一个配置web API的问题 – Ciccio