Ho从WebApiController访问具有许多操作和相同参数的Action

时间:2014-04-28 15:46:49

标签: c# asp.net-mvc angularjs

我看不到麻烦,我有很多动作的ApiController,当我尝试对动作之一做出请求时我有以下异常。提前致谢

// Angular脚本

var app = angular.module('app');
app.factory('userRepository', function ($http) {

    var defaultUrl = 'api/UsersApi';

    return {

      addUserToRole: function (data) {
              return $http({
                method: 'POST',
                url: defaultUrl + '/' + 'AddUserToRole',
                data: {
                    RoleId: data.RoleId,
                    UserId: data.User.UserId
                }
            });
        }
    }
});



//Api controller
public class UsersApiController : ApiController
    {
        UserRepository uRep;
        RoleRepository rRep;

        [Authorize]
        [HttpPost]
        public HttpResponseMessage AddUserToRole(Int32 RoleId, Int32 UserId)
        {
            try
            {
                uRep = new UserRepository();
                uRep.AddUserToRole(UserId, RoleId);
            }
            catch (Exception ex)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            return new HttpResponseMessage(HttpStatusCode.OK);
        }
    }
}

  //Route configuration
    public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                config.Routes.MapHttpRoute(
                   name: "DefaultApi1",
                   routeTemplate: "api/{controller}/{action}/{id}",
                   defaults: new { id = RouteParameter.Optional }
            );

                config.Routes.MapHttpRoute(
                    name: "DefaultApi2",
                    routeTemplate: "api/{controller}/{action}"
                                  );
            }
        }

请求后我得到了结果:

此XML文件似乎没有与之关联的任何样式信息。文档树如下所示。 请求的资源不支持http方法'GET'。

如果我将HttpPost更改为HttpGet,则会出现以下错误

此XML文件似乎没有与之关联的任何样式信息。文档树如下所示。 未找到与请求URI'/ api / UsersApi / AddUserToRole'匹配的HTTP资源。 未在与请求匹配的控制器“UsersApi”上找到任何操作。

1 个答案:

答案 0 :(得分:1)

在您服务中的addUserToRole功能中,而不是使用帖子集params设置数据:

params: {RoleId: data.RoleId,UserId: data.User.UserId}

另外,检查您的Web API路由配置以确保您允许使用相同HTTP方法的多个请求到一个控制器,通过在路由配置中包含操作名称来执行此操作。

config.Routes.MapHttpRoute(
   name: "DefaultApi",
   routeTemplate: "api/{controller}/{action}/{id}",
   defaults: new { id = RouteParameter.Optional }
);