我是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)。
有人可以向我解释如何设置它。
答案 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。它描述了所有这些,以及您可以使用路由器做的更多内容。