首页 > 解决方案 > 如何将 SurfaceController URL 添加到 Umbraco 服务器变量以从 Umbraco 9 中的自定义 Umbraco DataType 访问

问题描述

我正在将自定义 DataType 的代码从 U8 移植到 U9。
此 DataType 正在调用 Surface 控制器以检索一些数据。

在 Umbraco v 版本中,我从“Umbraco.Sys.ServerVariables”访问 URL,例如:

var apiUrl = Umbraco.Sys.ServerVariables['MainKey']['Controller1URL'];

我们在项目启动时将值设置为该变量,ServerVariablesParser.Parsing例如:

    // https://our.umbraco.com/documentation/extending/version7-assets
    公共类 BackofficeControllersURLListRegistrator : IComponent
    {
        公共无效初始化()
        {
            Umbraco.Web.JavaScript.ServerVariablesParser.Parsing += ServerVariablesParser_Parsing;
        }

        private void ServerVariablesParser_Parsing(object sender, Dictionary<string, object> e)
        {
            if (HttpContext.Current == null) throw new InvalidOperationException("HttpContext is null.");

            var backofficseUrls = new Dictionary<string, string>();

            var url = new System.Web.Mvc.UrlHelper(new RequestContext(new HttpContextWrapper(HttpContext.Current), new RouteData()));
            backofficeseUrls.Add(
                "Controller1URL", url.GetUmbracoApiService<Controllers.ApiControllers.Test1Controller>(controller => controller.TestFunction())
            );

            e.Add("MainKey", backofficeseUrls);
        }

        公共无效终止()
        {
        }
    }

如果存在,我们将如何在 Umbraco 9 中连接到 ServerVariablesParser Notification,以及如何检索 Controller 函数 URL,以便我可以像以前版本一样在 DataType JS 代码中检索它?

问题是针对 umbraco9,但我无法创建新标签...

标签: .net-coreasp.net-core-mvcumbraco.net-5

解决方案


正如您所说,Umbraco 9 事件已重命名为通知。查看文档我看不到 ServerVariablesParser 通知。您能否不创建自定义通知(此处),使用 Dot peek 从 ServerVariablesParser 复制代码并实现您自己的事件?


推荐阅读