带参数的默认路线

时间:2019-07-12 04:56:30

标签: asp.net-mvc asp.net-mvc-5

我已经创建了一个控制器,但是我不想将默认的chrome_debug.txtchrome.exe "https://www.example.com/" 命名为Action。我在View中创建了Action,如下所示:

Index

并迁移到URL TopicsController

我试图将相同的原理应用于另一个名为[ActionName("Index")] public ActionResult Topics() { var topic = new Topic(); return View("Topics", topic.GetTopics()); } 的控制器,但是现在我有了参数。

xyz.com/Topics

但现在它是在说

  

找不到资源。

我该怎么做才能使该操作与ModulesController之类的URL匹配?

1 个答案:

答案 0 :(得分:1)

要访问网址 xyz.com/Modules/aaaa ,将Action操作的Modules名称更改为aaaa,如下所示:

[ActionName("aaaa")]
public ActionResult Modules(string id)
{
    var topic = new Topic();
    return View("Modules", topic.GetTopics());
}

仅供参考-最好避免使用ActionName过滤器来命名每个动作。在某些时候,它将变得难以管理。而是像这样管理RouteConfig中的路由:

routes.MapRoute(
    name: "Modules",
    url: "{controller}/{action}/{id}",
    defaults: new { controller="Modules", action="Modules", id=UrlParameter.Optional }
    );

以下Urls适用于上述路线:

  • xyz.com/Modules/aaaa
  • xyz.com/Modules/aaaa/123
  • xyz.com/Modules/aaaa?id=123

更新: 如果您想将'aaaa'作为参数,并希望通过 xyz.com/Modules/aaaa 访问操作(其中'aaaa'将作为值绑定到Id变量),然后将以下Route添加到路由表:

routes.MapRoute(
    name: "Modules",
    url: "Modules/{id}",
    defaults: new { controller="Modules", action="Modules", id=UrlParameter.Optional }
    );

请注意上面Url的值。