类似的路由映射

时间:2012-06-26 13:34:29

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

我需要映射以创建控制器必须响应两个URL:

  1. “http:// localhost / api / controller?id = 1”(只有id值可以更改)
  2. “http:// localhost / api / controller / anotherId / someconst”(其中anotherId是唯一一个更改部分)
  3. 我将它映射到这样的路线:

    routes.MapHttpRoute("Test", "api/{controller}/{id}/{someconst}", new { controller = "Test", someconst = RouteParameter.Optional });
    

    我的控制器必须使用方法:

    public void Get(int id) { ... }
    public void Get(int anotherId, string someconst ) { ... }
    

    它有效...但它看起来不太好......因为“string someconst”不是一个参数,它只是url的一个常量部分。但如果我删除“字符串someconst”param第二个url将无法正常工作。 有没有可能将一个控制器映射到两个路由来解析这个URL,以便在没有虚假参数的情况下将其清除,这实际上是一个const?

2 个答案:

答案 0 :(得分:1)

嗯,我得到了答案......只是为了路线......

routes.MapHttpRoute("Test", "api/{controller}/{id}", new { controller = "Test", action = "Get", id= @"\d+"); );

routes.MapHttpRoute("TestSomeConst", "api/{controller}/{anotherId}/someconst", new { controller = "Test", action = "GetSomeconst", anotherId= @"\d+"); 

更改控制器方法(操作):

public void Get(int id) { ... } 
public void GetSomeconst(int anotherId) { ... } 

答案 1 :(得分:0)

您可以尝试做的一件事就是像这样映射路线:

 routes.MapHttpRoute("Test", "api/{controller}/{id}/{action}", new { controller = "Test", action = "Get", id= @"\d+"} );

并采取行动:

 public void Get(int id) { ... }

 [HttpGet]
 public void Someconst(int id) { ... }

由于您的操作默认为“获取”方法,因此您可以忽略该操作并使用以下方法调用它:

 http://localhost/api/test/1

如果您想调用其他方法,可以使用

 http://localhost/api/test/1/someconst