您好我正在使用angularjs开发web api应用程序。我在一个控制器中获取了三个方法,但没有一个在调用。例如,
public class usersController : ApiController
{
//First Get method.
[HttpGet]
[SuperAdmin]
[LoginCheck]
[ActionName("me")]
public HttpResponseMessage me()
{
}
//second Get method.
[LoginCheck]
[SuperAdmin]
public IHttpActionResult Get(int id)
{
}
//third Get method.
[HttpGet]
[LoginCheck]
[SuperAdmin]
public HttpResponseMessage Get(string role)
{
}
我正在使用以下代码致电。
this.getSubs = function () {
var role = "SUPER_ADMIN";
//role is optional here
var url = '/api/users/' + role;
return $http.get(url).then(function (response) {
return response.data;
});
}
this.getcurrentuser = function () {
var url = '/api/users/me/';
return $http.get(url).then(function (response) {
return response.data;
});
}
this.getSubsbyID = function (id) {
var url = '/api/users/' + id;
return $http.get(url).then(function (response) {
return response.data;
});
}
我的路线如下。
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我无法使用angularjs调用三种方法中的任何一种。我可以知道我在哪里做错了吗?任何帮助,将不胜感激。谢谢
答案 0 :(得分:1)
有两个问题,这可能是您的请求是CORS请求的问题。您可能需要启用CORS。首先,您需要安装nuget包Microsoft.AspNet.WebApi.Cors,然后在路由调用之前添加到api配置文件。
config.EnableCors();
其次,调整路由以使用属性路由可能会有所帮助。 WebApi不支持像普通MVC控制器那样的Action路由。您可能已在配置文件中设置了一些路由,例如
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
这将允许您调用控制器用户,但我发现尝试让ApiController使用签名调用适当的GET方法是有问题的。我建议你使用属性路由。如果它不存在,您可以将属性路由添加到您的配置
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
然后您可以像这样设置HttpGet属性路由。
public class usersController : ApiController
{
//First Get method.
[HttpGet]
[SuperAdmin]
[LoginCheck]
[Route("api/users/me")] // this is your routing attribute
public HttpResponseMessage me()
{
}
//second Get method.
[LoginCheck]
[SuperAdmin]
[Route("api/users/{id:int}")]
public IHttpActionResult Get(int id)
{
}
//third Get method.
[HttpGet]
[LoginCheck]
[SuperAdmin]
[Route("api/users/{role}")]
public HttpResponseMessage Get(string role)
{
}
希望这有帮助。