【问题标题】:Umbraco surface controller inside v6 projectv6 项目中的 Umbraco 表面控制器
【发布时间】:2013-08-28 08:17:32
【问题描述】:

我已经在我的 Umbraco 应用程序 (v6) 中实现了一个 Surface 控制器,但是它不起作用。

这是简单的 Hello World 类:

public class MySurfaceController : Umbraco.Web.Mvc.SurfaceController
{
    [HttpGet]
    public ActionResult Index()
    {
        return Content("hello world");
    }
}

不幸的是,每当我访问它时,都会收到 HTTP 404 错误。我尝试了以下网址:

  • /Umbraco/surface/my
  • /Umbraco/surface/mysurface
  • /Umbraco/surface/mysurfacecontroller
  • /Umbraco/surface/my/index
  • /Umbraco/surface/mysurface/index
  • /Umbraco/surface/mysurfacecontroller/index

我的 Global.asax 继承自 Umbraco.Web.UmbracoApplication

有人对我可能做错了什么有任何建议吗?

谢谢

【问题讨论】:

    标签: c# asp.net asp.net-mvc umbraco


    【解决方案1】:

    这里有几件事:

    您不再需要结束控制器名称“SurfaceController”,只需从SurfaceController 继承即可。

    此外,您不需要路径前缀/Umbraco/surface/,如果您的控制器被称为MyController,您应该能够在/my/ 访问Index() 操作。

    编辑:

    假设您想从控制器提供页面,您需要修改 web.config AppSetting 条目以包含控制器的路径

    <add key="umbracoReservedPaths" value="~/umbraco,~/install/,~/my" />
    

    您还需要从 global.asax 中专门为您的控制器注册一个路由:

    routes.MapRoute(
        name: "Default",
        url: "my/{action}/{id}",
        defaults: new { action = "Index", id = UrlParameter.Optional }
    );
    

    重要的是,这是特定于您的控制器的,因为您不希望它覆盖任何 Umbraco 路由。

    【讨论】:

    • 好的,我已将控制器的名称更改为 MyController 并尝试在 /my/index、/mycontroller/index、/my/、/umbraco/surface/my、/Umbraco/ 访问它表面/我的/索引。只不过是一个错误 404。
    • 我已经更新了答案,您可能还没有做出/不知道其他更改。
    • 感谢您的帮助。但是,我发现另一个组件正在清除 RouteTable。我以前无法调试,因为每当我开始调试时 VS 都会出错!无论如何,我现在已经解决了这一系列问题!谢谢
    • 你在哪里映射这条路线?因为 umbraco 的 global.asax 使用自己的 UmbracoApplication 类。我尝试通过从 Umbraco 的 UmbracoApplication 类继承并在 onApplicationStarting 事件中映射路由来创建 MvcApplication 类,但这会导致错误 - “匹配的路由不包含‘控制器’路由值,这是必需的。”
    • 您应该在继承 UmbracoApplication 的 Global.asax 类中映射 OnApplicationStarted 中的路由。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多