如何在Web API中调用多个get方法

时间:2017-02-24 12:57:00

标签: angularjs asp.net-web-api routing

您好我正在使用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调用三种方法中的任何一种。我可以知道我在哪里做错了吗?任何帮助,将不胜感激。谢谢

1 个答案:

答案 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)
        {
}

希望这有帮助。