2013-11-25 23 views
0

我们希望有一个看起来像这样的路线:MVC路线随着嵌入式标识

/account/123/dosomething/234 

在这种情况下,account将控制器和requesttrafficid将是行动,我猜。我假设我可以这样定义这条路线:

{controller}/{accountId}/{action}/{id} 

在这种情况下,这两个ID只是成为操作的参数。

问题是:可以为Web API做这样的事情吗?

我们正常的MVC控制器只是返回视图和其他静态内容。 我们所有的数据都来自API。 我们希望我们的路线是尽可能接近,这样的事情:

api/account/123/dosomething/234 

根据我的理解,account不会是API控制器,这将是dosomething。这两个ID再次成为参数。但是,我如何定义这条路线?我只是硬编码'账户'部分?

+0

为什么你会认为'account'不会是API控制器?鉴于您的API部署在'/ api'并且您的API控制器被命名为'AccountApiController',相同的路径将匹配。 –

+0

@ChrisPratt我的印象是,Web API控制器只能以'Get' /'Put' /'Post' /'Delete'开头。本身没有行动名称这样的事情。所以'dosomething'不能存在。 –

回答

0

随着AttributeRouting,这是一块蛋糕:http://attributerouting.net。您只需将占位符放在URL中的正确位置,MVC就可以处理剩下的事情。

1

如果你只关心的是能够使路线的动作部分是相同的,你有两个选择:

  1. 你不需要使用的[Method]Action的命名惯例。如果不遵守这个习惯,你只需要指定哪些方法适用与适当的属性:

    // These are functionally equivalent: 
    
    public JsonResult GetSomething(int id) { ... } 
    
    [HttpGet] 
    public JsonResult DoSomething(int id) { ... } 
    
  2. 如果你想遵循惯例,但要自定义动作的名称用于路由目的,你可以使用ActionName属性:

    [ActionName("dosomething")] 
    public JsonResult GetSomething(int id) { ... } 
    
+0

如果有多个“POST”类型的动作会怎么样?我如何区分它们? –