Sensenet:使用Sensenet客户端API

时间:2017-02-09 12:10:40

标签: .net sensenet

在我的应用程序上,我有自己的API,可以将内容保存在不同的存储库中。其中一个是Sensenet。

我使用客户端API将内容存储在Sensenet上,但在初始化客户端上下文时遇到问题:

ClientContext.Initialize(new[]
            {
                new ServerContext
                {
                    Url = siteUrl,
                    Username = userName,
                    Password = userPassword
                }
            });

当我启动我的应用程序时,对方法的第一次调用初始化很好,但在第二次调用时依此类推它会启动异常......

我相信解决方案可以通过使用ClientContext.Current传递......但我不知道应该如何实现它...

1 个答案:

答案 0 :(得分:1)

客户端上下文的 Initialize 方法应该在每个应用域中仅调用一次。这就是你在第二次通话时得到例外的原因。

在您的情况下(当您从其他Web应用程序调用Sense / Net时),您应该只在应用程序启动过程中的某个位置调用它。作为一个不同的例子:从命令行工具中,它应该在Main方法中的某个地方调用。

Initialize方法目前没有做太多工作,只存储提供的服务器信息。如果您想从导入器工具中使用单个管理员用户调用Sense / Net,这非常有用,这样您就不必在每次调用时都提供用户凭据。

但是如果你想用不同的用户凭证(使用Sense / Net的权限系统)来调用方法,你可以简单地在每次调用时提供服务器信息。例如:

var server = new ServerContext
{
    Url = "http://example.com",
    Username = "johnsmith",
    Password = "password"
};

// see the server parameter here!
var content = await Content.LoadAsync(1234, server);
content["MyField"] = "value";

// no server parameter, we already know it
await content.SaveAsync();