Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有办法通过umbraco中的api返回当前站点节点id?_C#_Api_Umbraco - Fatal编程技术网

C# 是否有办法通过umbraco中的api返回当前站点节点id?

C# 是否有办法通过umbraco中的api返回当前站点节点id?,c#,api,umbraco,C#,Api,Umbraco,Umbraco的新手当然 我有一些代码,用于返回给定节点id的特定数据类型内容,详细信息如下: 这很好,但是我必须知道起始节点,即在我的情况下,站点节点id(多站点umbraco安装) 我还知道,您可以通过以下方式获取主根节点: 我的问题是…… 从后端API,是否仍然可以动态获取当前站点节点ID(第一个链接)?这样我就不必事先知道了。我认为可以从查询字符串中获取站点id。。Page.Request.QueryString[“id”]但是我猜如果该页面是模板页面,那么会返回此消息,但是这是来自

Umbraco的新手当然

我有一些代码,用于返回给定节点id的特定数据类型内容,详细信息如下:

这很好,但是我必须知道起始节点,即在我的情况下,站点节点id(多站点umbraco安装)

我还知道,您可以通过以下方式获取主根节点:

我的问题是……

从后端API,是否仍然可以动态获取当前站点节点ID(第一个链接)?这样我就不必事先知道了。我认为可以从查询字符串中获取站点id。。Page.Request.QueryString[“id”]但是我猜如果该页面是模板页面,那么会返回此消息,但是这是来自后端类

还有吗?或者我找错树了


任何帮助都将不胜感激

假设所有根节点都是相同的文档类型,在razor中,您可以执行以下操作:

var folderId=@Model.AncestorOrSelf(“MyFolderType”).Id

它将从当前节点“向上”或“向后”搜索,直到找到指定类型的节点类型

这里有另一种方式:


假设所有根节点都是相同的文档类型,在razor中,您可以执行以下操作:

var folderId=@Model.AncestorOrSelf(“MyFolderType”).Id

它将从当前节点“向上”或“向后”搜索,直到找到指定类型的节点类型

这里有另一种方式:


假设您有一个Umbraco安装,有两个站点,分别有各自的主页和页面,例如

  • 内容(-1)
    • 主页1(1000)
      • 第1.1页(1001)
    • 主页2(1002)
      • 第2.1页(1003)
在C#中,可以使用

Node currentNode = Node.GetCurrent();
其对应的主节点可以通过

Node currentHome = new Node(int.Parse(currentNode.Path.Split(',')[1]));
现在,
currentNode.Path
返回以-1开头的逗号分隔整数字符串, i、 e.根,你称之为主根,所有主页都在它下面“生存”

例如,第2.1页的路径值为-110021003。在逗号处拆分时,将得到一个包含索引为0、1、2的3个元素的数组。现在,第二个索引为索引1将给出主节点的id。如您所见,最后一个id是当前节点的id。另外,索引还表示节点的级别,因此主页的级别为1

我在一个模板上使用了下面的脚本,该模板在内联网/外联网上使用,并且具有受保护的页面。当访问者通过链接访问受保护的页面时,他/她将被拒绝访问并重定向到具有成员登录名的主页

<%@ Master Language="C#" MasterPageFile="~/umbraco/masterpages/default.master" AutoEventWireup="true" %>    

<%@ Import Namespace="umbraco.NodeFactory" %>

<script runat="server" language="CSharp">
    protected void Page_Load(object sender, EventArgs e)
    {
        // prevents template to be run without proper authorisation
        Node currentNode = Node.GetCurrent();
        Node currentHome = new Node(int.Parse(currentNode.Path.Split(',')[1]));
        Boolean HasAccess = umbraco.library.HasAccess(currentNode.Id, currentNode.Path);
        Boolean IsProtected = umbraco.library.IsProtected(currentNode.Id, currentNode.Path);

        if (IsProtected && !HasAccess)
        {
            // redirect to ancestor-or-self::HomePage
            Response.Status = "403 Forbidden";
            Response.Redirect(umbraco.library.NiceUrl(currentHome.Id), true);
        }
    }
</script>      

<asp:Content ContentPlaceHolderID="ContentPlaceHolderDefault" runat="server">
    <!-- redirect to home page -->
</asp:Content> 

受保护的无效页面加载(对象发送方、事件参数e)
{
//防止在未经适当授权的情况下运行模板
Node currentNode=Node.GetCurrent();
节点currentHome=新节点(int.Parse(currentNode.Path.Split(',')[1]);
布尔HasAccess=umbraco.library.HasAccess(currentNode.Id,currentNode.Path);
布尔值IsProtected=umbraco.library.IsProtected(currentNode.Id,currentNode.Path);
如果(i受保护&!HasAccess)
{
//重定向到祖先或自我::主页
Response.Status=“403禁止”;
Response.Redirect(umbraco.library.NiceUrl(currentHome.Id),true);
}
}

假设您有一个Umbraco安装,有两个站点,分别有各自的主页和页面,例如

  • 内容(-1)
    • 主页1(1000)
      • 第1.1页(1001)
    • 主页2(1002)
      • 第2.1页(1003)
在C#中,可以使用

Node currentNode = Node.GetCurrent();
其对应的主节点可以通过

Node currentHome = new Node(int.Parse(currentNode.Path.Split(',')[1]));
现在,
currentNode.Path
返回以-1开头的逗号分隔整数字符串, i、 e.根,你称之为主根,所有主页都在它下面“生存”

例如,第2.1页的路径值为-110021003。在逗号处拆分时,将得到一个包含索引为0、1、2的3个元素的数组。现在,第二个索引为索引1将给出主节点的id。如您所见,最后一个id是当前节点的id。另外,索引还表示节点的级别,因此主页的级别为1

我在一个模板上使用了下面的脚本,该模板在内联网/外联网上使用,并且具有受保护的页面。当访问者通过链接访问受保护的页面时,他/她将被拒绝访问并重定向到具有成员登录名的主页

<%@ Master Language="C#" MasterPageFile="~/umbraco/masterpages/default.master" AutoEventWireup="true" %>    

<%@ Import Namespace="umbraco.NodeFactory" %>

<script runat="server" language="CSharp">
    protected void Page_Load(object sender, EventArgs e)
    {
        // prevents template to be run without proper authorisation
        Node currentNode = Node.GetCurrent();
        Node currentHome = new Node(int.Parse(currentNode.Path.Split(',')[1]));
        Boolean HasAccess = umbraco.library.HasAccess(currentNode.Id, currentNode.Path);
        Boolean IsProtected = umbraco.library.IsProtected(currentNode.Id, currentNode.Path);

        if (IsProtected && !HasAccess)
        {
            // redirect to ancestor-or-self::HomePage
            Response.Status = "403 Forbidden";
            Response.Redirect(umbraco.library.NiceUrl(currentHome.Id), true);
        }
    }
</script>      

<asp:Content ContentPlaceHolderID="ContentPlaceHolderDefault" runat="server">
    <!-- redirect to home page -->
</asp:Content> 

受保护的无效页面加载(对象发送方、事件参数e)
{
//防止在未经适当授权的情况下运行模板
Node currentNode=Node.GetCurrent();
节点currentHome=新节点(int.Parse(currentNode.Path.Split(',')[1]);
布尔HasAccess=umbraco.library.HasAccess(currentNode.Id,currentNode.Path);
布尔值IsProtected=umbraco.library.IsProtected(currentNode.Id,currentNode.Path);
如果(i受保护&!HasAccess)
{
//重定向到祖先或自我::主页
Response.Status=“403禁止”;
Response.Redirect(umbraco.library.NiceUrl(currentHome.Id),true);
}
}

您好,谢谢您的回复!对于翁布拉科来说,这是一个非常新的概念,需要一段时间才能理解很多细节。。因此没有想到向上遍历到特定的节点类型。。我猜是这样的。。不幸的是,我没有使用剃须刀页面。。实际上,我有一个ASHX页面,它调用一些后端代码来计算逻辑(使用Umbraco API调用),然后