在Web Api中添加自定义路径名称和自定义操作名称

时间:2014-01-08 09:19:48

标签: asp.net-mvc-4 asp.net-web-api routes asp.net-mvc-5

我的WebApiController名称为AdminDashBoard。

 public class AdminDashBoardController : ApiController
 {
        [System.Web.Http.AcceptVerbs("GET")]       
        public HttpResponseMessage GetCaseHistory(string CaseRefId, string token)
        {
           **Implementation**
        }
 }

我可以使用
来访问API Localhost/api/AdminDashBoard/GetCaseHistory?CaseRefId=CTcs004&token=eygk

但我想通过自定义名称(例如
)来访问它 Localhost/api/Cases/GetCaseHistory?CaseRefId=CTcs004&token=eygk

我已在WebApiConfig中定义了自定义路由,但它无效。

config.Routes.MapHttpRoute("CaseHistory", "api/cases/{action}/{CaseRefId}/{token}", defaults: new { controller = "AdminDashBoard", action = "GetCaseHistory", CaseRefId = RouteParameter.Optional, token = RouteParameter.Optional });

1 个答案:

答案 0 :(得分:2)

您配置的路由将解析为:

controller => AdminDashBoard
action => GetCaseHistory

但请注意,由于您已将/ {action}放置在路径模板字符串中,因此会影响检测路由以期望在请求URL中指定“操作”。

你可以试试这个:

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

请记住将路线放在默认路线之前,因为默认路线会在自定义路线之前捕获请求。

此外,您不需要在查询字符串中将参数“CaseRefId”和“token”定义为路由,如果您在控制器方法中定义了正确的类型,则应该解析它。

希望这有帮助。