1

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

  1. “http://localhost/api/controller?id=1”(只有 id 值可以改变)
  2. “http://localhost/api/controller/anotherId/someconst”(其中 anotherId 是唯一变化的部分)

我将它映射到这样的路线:

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的一个const部分。但是,如果我删除“string someconst”参数,第二个 url 将不起作用。是否可以将一个控制器映射到两条路由以解析此 url,以使其清楚,而无需假参数,实际上是 const?

4

2 回答 2

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) { ... } 
于 2012-06-29T13:54:35.237 回答
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) { ... }

因为您的操作默认为“Get”方法,您可以忽略它并使用以下命令调用它:

 http://localhost/api/test/1

如果你想调用你的其他方法,你会使用

 http://localhost/api/test/1/someconst
于 2012-07-03T14:59:29.910 回答