0

我有以下路线,其中任何以 A、F 或 L 开头的 URL 都指向索引操作。看起来像是使用了一个 C 锐利的正则表达式。

        context.MapRoute(
            "content",
            "{page}/{title}",
            new { controller = "Server", action = "Index" },
            new { page = @"^[AFL][0-9A-Z]{3}$" }
        );

我想做类似的事情,但这次将任何具有菜单、目标、页面或主题操作的 URL 引导到索引操作并传递“菜单”、“目标”、“页面”或“主题”将 Index 操作作为参数:

有人可以告诉我如何做到这一点。它看起来像一种 C# 正则表达式,但我不确定如何执行第二条路线所需的表达式。

4

2 回答 2

1

您只需要一个简单的路由约束:

   context.MapRoute(
        "content",
        "{page}/{title}",
        new { controller = "Server", action = "Index" },
        new { page = @"Menus|Objectives|Pages|Topics" }
    );

然后您的操作方法签名将如下所示:

public ActionResult Index(string page)
{
    ...
    return View();
}
于 2012-09-06T13:34:53.103 回答
0

看这里的例子......

http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-route-constraint-cs 你已经定义了一个带有参数的路由。

routes.MapRoute(
    "Content",
    "Content/{TypeOfAction}",
    new {controller="Content", action="Index"},
    new {@"\b(Menus|Objectives|Pages|Topics)\b"}

);

假设您有一个带有 Index 操作的 ContentController,它将 TypeOfAction 作为参数处理

编辑了答案: \b在正则表达式中找到单词边界...尚未对其进行测试,但应该可以工作... http://www.regular-expressions.info/wordboundaries.html http://www.regular-expressions.info/交替.html

于 2012-09-06T13:15:22.827 回答