【问题标题】:Similar route mapping类似的路由映射
【发布时间】:2012-07-05 22:53:16
【问题描述】:

我需要映射来创建控制器必须响应两个 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)的情况下清楚地说明?

【问题讨论】:

  • 您的意思是要对控制器进行其他操作吗?你可以说“api/{controller}/{id}/{action}”,然后不叫它“public void Get(int anotherId, string someconst)”,而是叫它“public void GetSomeConst(int anotherId)”。只需确保您设置了默认操作
  • 我不完全理解你,但认为你是对的......我找到了相同的解决方案......谢谢

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


【解决方案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) { ... } 

【讨论】:

  • 移至答案,以便我可以更好地解释。
【解决方案2】:

您可以尝试做的一件事是像这样绘制路线:

 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

【讨论】:

  • 你确定这会起作用吗?我完全复制了你的代码,它没有......只是第一个方法被解雇了
  • 我稍微更改了代码,我运行了一个简单的测试应用程序,更新后的代码可以正常工作。我对控制器/动作命名的工作方式有点困惑。出于某种原因,我认为您不必在请求中为 getsomeconst 端点拼出“get”,但您这样做了。使用“[HttpGet]”属性,您不必这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
相关资源
最近更新 更多