【问题标题】:Add Custom Route name with custom action name in WebApi在 WebApi 中添加自定义路由名称和自定义操作名称
【发布时间】:2014-01-26 07:15:02
【问题描述】:

我有我的WebApiController,名称为 AdminDashBoard。

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

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

访问 API

但我想通过自定义名称访问它,例如
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 });

【问题讨论】:

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


    【解决方案1】:

    您配置的路由将解析为:

    controller => AdminDashBoard
    action => GetCaseHistory
    

    但请注意,由于您已将 /{action} 放在 rout 模板字符串中,因此会影响路由检测以期望在请求 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”,如果在控制器方法中定义了正确的类型就应该解决。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多