我想像这样设计我们的控制器和动作:
每个控制器都有一个名为“StaticPage(string page)”的动作(考虑创建一个 BaseController 以从它派生,但现在,我们将只讨论作为控制器的“套件”)。
此操作返回视图,这些视图主要包含 HTML 代码,没有模型。因此,我不想为 20 个琐碎的视图创建 20 个动作,而是希望一个动作通过一个参数来管理和区分它们。
但是在同一个控制器上,我希望他们拥有返回带有模型的视图并执行更复杂和与数据库相关的事情的操作。起初,我考虑了以下路线(注意:在这个场景中,存在一个“产品”区域):
context.MapRoute(
"Product_default",
"Product/{controller}/{action}",
new { action = "index"}
);
context.MapRoute(
"StaticPage_Route",
"Product/{controller}/{page}",
new { action = "StaticPage", page = UrlParameter.Optional
);
所以假设我们得到了 View TechnicalSpecification.cshtml和TrivialPage.cshtml,当我打电话时
/产品/套件/技术规格
它应该搜索并找到操作“TechnicalSpecification”,但是当我尝试
/产品/套件/TrivialPage
它还应该首先搜索“TrivialPage”操作。但是,当它没有找到它时,它应该将其视为一个名为 page 的参数(就像我上面提到的 Routes 中一样)。
但我真的不知道,如何管理这个权利。有没有办法在不设置自定义 ActionFilter 属性的情况下检查 OnActionExecuted(...) 中的某些内容,然后执行某些操作来调用“StaticPage”-Action?