您不必配置任何特殊的路由 - 一切都直接融入 Umbraco。
根据经验,Surface Controller 最适合用于可重用操作,自定义控制器(路由劫持)更适合将自定义逻辑添加到 Umbraco 中的整个页面(文档类型/模板)。
这两种方法都可以让您获得完全相同的结果 - 它们之间的唯一区别是抽象。
表面控制器是继承自 Umbraco.Web.Mvc.SurfaceController 的 MVC Child Actions - 这增加了有用的 Umbraco 特定属性和方法。
Surface Controller 非常适合创建可重用的东西,例如表单或任何您需要部分来执行任何复杂操作(即由控制器支持)的地方。看看documentation here。
当您使用自定义控制器更改页面的呈现方式时,称为 Route Hijacking
为此,您创建自己的控制器,而不是继承自 Umbraco.Web.Mvc.RenderMvcController,如下所示:
public class HomeController : Umbraco.Web.Mvc.RenderMvcController
{
public ActionResult MobileHomePage(RenderModel model)
{
//Do some stuff here, the return the base Index method
return base.Index(model);
}
}
这是“主页”文档类型的自定义控制器。您当然可以返回一个继承自 RenderModel 的自定义模型,并带有您自己的属性和方法。
更完整的示例和documentation can be found here。
发布请求
这两个选项都允许您通过添加 [httppost] 属性来处理 POST 请求,如下所示:
表面控制器:
public class YourSurfaceController: SurfaceController
{
public ActionResult YourAction()
{
// Do stuff
}
[HttpPost]
public ActionResult YourAction()
{
// Do stuff on POST
}
}
路由劫持控制器:
public class HomeController : Umbraco.Web.Mvc.RenderMvcController
{
public ActionResult MobileHomePage(RenderModel model)
{
//Do some stuff here, the return the base Index method
return base.Index(model);
}
[HttpPost]
public ActionResult MobileHomePage(RenderModel model)
{
//Do some stuff on POST, the return the base Index method
return base.Index(model);
}
}