8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Autodesk 平台服务 (Forge) .NET SDK OssClient.DeleteObjectAsync() 和 OssClient.GetObjectDetailsAsync() NullReferenceException

verfluecht 3月前

168 0

我可以使用本地文件在指定的存储桶中成功创建新对象,如下所示。可以使用 OSS 管理器工具进行验证。但是,我无法获取该对象的详细信息或

我可以使用本地文件在指定的存储桶中成功创建新对象,如下所示。可以使用 OSS 管理器工具

Screenshot .

但是,我无法获取该对象的详细信息或删除该对象。调用被抛出“System.NullReferenceException”,没有任何详细信息。访问令牌和存储桶密钥与上传图像中显示的相同,因此它们不为空。

Screenshot

所有范围都添加到令牌中以确保这不是问题,即使它会引发不同的错误。

Screenshot

成功执行这些方法的正确方法是什么?

我尝试使用对象的名称、objectId 和 objectKey,但没有成功。

帖子版权声明 1、本帖标题:Autodesk 平台服务 (Forge) .NET SDK OssClient.DeleteObjectAsync() 和 OssClient.GetObjectDetailsAsync() NullReferenceException
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由verfluecht在本站《.net》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 您是否使用了他们的最新 Nuget 包(1.1.0)?如果是,请尝试降级到早期版本。

    今天早些时候我遇到了同样的问题,这个解决了它。我认为他们忘记在最新发布的 SDK 包中初始化 OssClient 构造函数中的objectsApi 字段。

    最好的

  • 谢谢@Romain Bigare!我使用的是“Autodesk.Oss”版本 1.1.0。当回滚到版本 1.0.1 时,调用成功。

  • 我正在使用干净的架构和 FinBuckle 7.0.1 创建多租户 API。我的单元测试运行良好,我可以在客户端标头中设置租户标识符的功能测试也运行良好,

    我使用干净的架构和 FinBuckle 7.0.1 创建了一个多租户 API。我的单元测试运行良好,并且我可以在客户端标头中设置租户标识符的功能测试也运行良好,但是,我无法运行集成测试,因为 AppDbContext 中的 tenantinfo 实例始终为空。在测试设置期间,我在 docker 中启动了一个新的 SQL 服务器,构建并使用测试数据填充数据库,DbContext 可以正常工作。但在测试执行期间,tenantindo 始终为空。

    是否有人成功创建了通过 WebApplicationFactory '注入'租户的集成测试?

    我已经尝试了好几天,并使用了在网上能找到的所有建议,甚至使用了静态租户,但是在测试运行时,AppDbContext 中的租户实例总是为空。

    如有任何建议我将不胜感激。

  • 的 .NET SDK 代码库来看 ObjectsApi.gen.cs#L1227 ,它调用 DELETE buckets/:bucketKey/objects/:objectKey 来直接删除对象/文件。因此,objectKey 应该是对象名称(文件名),不包括 urn:adsk.objects:os.object:{{bucketName}} .

    您传递的字符串是objectId,而不是objectKey。

    例如,如果您的 objectId urn:adsk.objects:os.object:mybucket/test.ipt objectKey 则为 test.ipt .

  • 你好,Eason,正如 OP 中提到的,我尝试了 ObjectId 和 ObjectKey,但没有成功。回滚包版本,然后使用 ObjectKey,调用就可以正常工作了。

  • 我希望能够在 C# 控制台应用程序中捕获 Ctrl+C,以便在退出之前进行一些清理。最好的方法是什么?

    我希望能够在 C# 控制台应用程序中捕获Ctrl+C,以便在退出之前进行一些清理。最好的方法是什么?

  • 参见 MSDN:

    Console.CancelKeyPress 事件

    包含代码示例的文章:

    Ctrl-C 和 .NET 控制台应用程序

  • 实际上,那篇文章推荐的是 P/Invoke,而 CancelKeyPress 只是在评论中被简要提及。一篇好文章是 codeneverwritten.com/2006/10/…

  • 这有效,但它不会用 X 捕获窗口的关闭。请参阅下面的完整解决方案。也可以与 kill 一起使用

  • 引用 11

    我发现如果控制台关闭,Console.CancelKeyPress 将停止工作。使用 systemd 在 mono/linux 下运行应用程序,或者如果应用程序以 \'mono myapp.exe </dev/null\' 运行,则 SIGINT 将发送到默认信号处理程序并立即终止应用程序。Linux 用户可能需要查看 .com/questions/6546509/…

  • 引用 12

    这是上述文章的永久链接:codeneverwritten.blogspot.com/2006/10/… 当我在搜索 Ctrl-C 处理时,很有趣地偶然发现了我自己在 SO 上的文章。:)

  • 事件 Console.CancelKeyPress 用于此目的。其使用方法如下:

    public static void Main(string[] args)
    {
        Console.CancelKeyPress += delegate {
            // call methods to clean up
        };
    
        while (true) {}
    }
    

    当用户按下Ctrl+C,委托中的代码将运行,程序将退出。这样,您就可以通过调用必要的方法来执行清理。请注意,委托之后的代码不会被执行。

    在其他情况下,这种方法行不通。例如,如果程序当前正在执行无法立即停止的重要计算。在这种情况下,正确的策略可能是在计算完成后告诉程序退出。以下代码给出了如何实现此方法的示例:

    class MainClass
    {
        private static bool keepRunning = true;
    
        public static void Main(string[] args)
        {
            Console.CancelKeyPress += delegate(object? sender, ConsoleCancelEventArgs e) {
                e.Cancel = true;
                MainClass.keepRunning = false;
            };
            
            while (MainClass.keepRunning) {
                // Do your work in here, in small chunks.
                // If you literally just want to wait until Ctrl+C,
                // not doing anything, see the answer using set-reset events.
            }
            Console.WriteLine("exited gracefully");
        }
    }
    

    此代码与第一个示例的区别在于, e.Cancel 设置为 true,这意味着在委托之后继续执行。如果运行,程序将等待用户按下Ctrl+C。当发生这种情况时, keepRunning 变量的值会改变,从而导致 while 循环退出。这是一种让程序正常退出的方法。

  • 引用 14

    keepRunning 可能需要标记为 volatile。否则,主线程可能会将其缓存在 CPU 寄存器中,并且在执行委托时不会注意到值的变化。

  • 这有效,但它不会捕获带有 X 的窗口关闭。请参阅下面的完整解决方案。也可以与 kill 一起使用。

  • 对于在 Git-Bash、MSYS2 或 CygWin 中运行程序的其他任何人,请注意:您必须通过 winpty 运行 dotnet 才能使其正常工作(因此,winpty dotnet run)。否则,委托将永远不会运行。

  • 注意 - CancelKeyPress 事件是在线程池线程上处理的,这不是很明显:learn.microsoft.com/en-us/dotnet/api/...

  • 引用 18

    我想补充一下 Jonas 的回答 。旋转 bool CTRLC+时浪费大量能源.

    更好的解决方案是使用 ManualResetEvent 来实际“等待”CTRL+C

    static void Main(string[] args) {
        var exitEvent = new ManualResetEvent(false);
    
        Console.CancelKeyPress += (sender, eventArgs) => {
                                      eventArgs.Cancel = true;
                                      exitEvent.Set();
                                  };
    
        var server = new MyServer();     // example
        server.Run();
    
        exitEvent.WaitOne();
        server.Stop();
    }
    
  • 我认为关键在于您将在 while 循环内完成所有工作,并且按 Ctrl+C 不会在 while 迭代中间中断;它会在中断之前完成该迭代。

  • @pkr298 - 很遗憾人们没有投票支持你的评论,因为这是完全正确的。我会编辑 Jonas 的回答,以澄清人们的想法与 Jonathon 的想法不同(这本身并不坏,但 Jonas 的回答并非如此)

返回
作者最近主题: