如何在一个控制器中处理两个不同的HttpPost

时间:2013-06-06 12:43:18

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

我有一个带

的通用控制器
 [HttpPost]
 public void Create(T entity)
 {
    ...
 }

和一个额外的控制器,它继承自通用控制器并且已经有了这个方法:

[ActionName("AddPrivileges")]
public void AddPrivileges(AddPrivilegeModel model)
{
    ...
}

我现在的问题是,控制器中有两个HttpPost请求。我尝试用路由修复它,但我认为我做了一些可怕的错误。

config.Routes.MapHttpRoute(
    name: "RoleActionRoute",
    routeTemplate: "api/Role2/AddPrivileges"
);

我能做什么或应该做什么?

1 个答案:

答案 0 :(得分:2)

您可以提供像这样的特殊映射

config.Routes.MapHttpRoute(
    name: "SpecialAction",
    routeTemplate: "api/{controller}/AddPrivileges",
    defaults: new { action = "AddPrivileges" }
    , constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) }
    );

config.Routes.MapHttpRoute(
    name: "PostAction",
    routeTemplate: "api/{controller}",
    defaults: new { action = "Create" }
    , constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) }
    );
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
    );

因此,您的特殊方法AddPrivileges现在具有特殊映射