使用一个控制器的C#路由

时间:2014-01-07 04:50:08

标签: c# routes

我是C#和.net的新手,我对路由有疑问。

我有一个名为cms_page的数据库表。此表包含一列page_url

我有一个名为CmsPageController的C#控制器。我想使用此控制器来处理页面请求。以下是可以输入的URL的一些示例,这些示例存储在page_url表的cms_page列中:

  • /com/en/aboutus
  • /com/en/contactus
  • /promotions/promo1

因此,当输入上述网址之一时,CMSPageController应运行,并将输入的网址与cms_page表格中的网址相匹配,并应返回page_data列中的cms_page列{{1}}表(即要显示的HTML)。

有人可以向我解释如何设置它。

1 个答案:

答案 0 :(得分:3)

最简单的方法是添加“全部捕获”路径。

以下是如何执行此操作的示例:

路线配置

routes.MapRoute(
     "PagesRoute",
     "{*pagepath}",
     new { Controller = "Pages", action = "Index" });

<强>控制器

public class PagesController : Controller
{
    public string Index(string pagepath)
    {
        // TODO: PUT THE CODE IN HERE TO QUERY THE DATABASE AND RETURN THE OUTPUT
    }
}

重要提示:此路线必须持续!!您还必须为图像和样式表等内容设置“忽略”路由。或者,您可以使用page开始路线,以便所有网页都位于/page/...。它看起来不太好,但从长远来看可能更容易管理。相反,您也可以选择使用.html(或您选择的任何其他扩展程序)结束所有网页,并添加正则表达式“约束”以仅匹配以.html结尾的网址。 (然后,您可以在执行数据库查询之前剥离扩展。)


在许多优秀的资源中,无论是在官方文档中还是在其外部,都是关于ASP.NET路由的,其中最有用的是有关自定义路由的CodeProject article。它描述了所有这些,以及您可以使用路由器做的更多内容。