如何防止出现在我的ASP.NET MVC2网址中的`Index`操作?

时间:2010-10-09 16:40:30

标签: asp.net-mvc-2 url-routing asp.net-mvc-routing

我的路线看起来像这样(但我尝试过几种不同的路线):

routes.MapRoute(
  "Metrics",
  "Metrics/{action}/{id}/{resource}/{period}",
  new { controller = "Metrics" }
);

MetricsController我有以下行动:

// Index sets up our UI
public ActionResult Index(int id, string resource, string period)

// GetMetrics returns json consumed by ajax graphing tool
public JsonResult GetMetrics(int id, string resource, string period)

如何在网址中生成链接并且没有Index以便我可以执行此操作?:

/Metrics/1234/cpu-0/10m  -> 
           MetricsController.Index(id, string resource, string period)

/Metrics/GetMetrics/1234/cpu-0/10m -> 
           MetricsController.GetMetrics(int id, string resource, string period)

我尝试了各种Html.ActionLinkHtml.RouteLink的咒语,但没有任何喜悦。

2 个答案:

答案 0 :(得分:1)

您可能需要两条路线,因为可选参数只能位于路线定义的末尾:

routes.MapRoute(
    "ActionlessMetrics",
    "Metrics/{id}/{resource}/{period}",
    new { controller = "Metrics", action = "Index" }
);

routes.MapRoute(
    "Metrics",
    "Metrics/{action}/{id}/{resource}/{period}",
    new { controller = "Metrics" }
);

并生成这些链接:

<%= Html.ActionLink("Link1", "Index", "Metrics", 
    new { id = 123, resource = "cpu-0", period = "10" }, null) %>
<%= Html.ActionLink("Link2", "GetMetrics", "Metrics", 
    new { id = 123, resource = "cpu-0", period = "10" }, null) %>

这将导致:

<a href="/Metrics/123/cpu-0/10">Link1</a>
<a href="/Metrics/GetMetrics/123/cpu-0/10">Link2</a>

并选择了适当的行动。

答案 1 :(得分:0)

嗯,这个方法实际上似乎并没有在mvc2中为我做这件事。无论动作方法名称仍然出现在URL中,无论是否具有上述路线。 Html.ActionLink仍然放入如下索引: &lt;%:Html.ActionLink(“Link1”,“Index”,“Metrics”,new {id = 10},new {@class =“font11”})%&gt;

仍在链接中生成索引。