如何在 C# 中调用自定义 url 协议?

Posted

技术标签:

【中文标题】如何在 C# 中调用自定义 url 协议?【英文标题】:How call a custom url protocol in C#? 【发布时间】:2019-12-20 17:30:41 【问题描述】:

我尝试从我的 C# API 调用自定义协议应用程序。

我的自定义协议已安装,我可以在浏览器中使用“my-app://myParams”URI 调用它, 但我不知道如何使用 webrequest 调用自定义 URL。我尝试添加一个实现 IWebRequestCreate 并调用它的新对象,但我有 *** 错误。

WebRequest.RegisterPrefix("my-app", new MyCustomWebRequestCreator());
WebRequest req = WebRequest.Create("my-app:");

internal class CustomWebRequestCreator : IWebRequestCreate

    WebRequest IWebRequestCreate.Create(Uri uri)
    
        return WebRequest.Create(uri); // what can I do here ?
    

在最后的代码中,我的 WebRequest.Create(uri) 方法出现了 *** 异常,但我不知道在这个方法中要做什么。

感谢您的帮助

【问题讨论】:

I have a *** exception 请向我们展示堆栈。 minimal reproducible example 也会很棒, Webrequest.Create 里面没有调用前缀创建者吗?我希望当您注册您的前缀时,这意味着您的处理程序将被调用,并且在您的处理程序中您调用 Webrequest.Create 来调用您的处理程序等。 referencesource.microsoft.com/#system/net/system/Net/… 从手机上看不太清楚,但是我认为有在 Create 方法中查找前缀处理程序的逻辑。 你做过这个工作吗? 【参考方案1】:

docs 说:

Create 方法必须返回 WebRequest 后代的初始化实例,该实例能够为协议执行标准请求/响应事务,而无需修改任何特定于协议的字段。

所以首先你需要创建一个 WebRequest 后代:

class AWebRequestDescendant : WebRequest

   ...

然后初始化并返回

WebRequest IWebRequestCreate.Create(Uri uri)

    return new AWebRequestDescendant();

【讨论】:

以上是关于如何在 C# 中调用自定义 url 协议?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 中注册自定义 URL 协议?

如何确保使用了我的自定义 URL 协议?

C#中如何实现WPF调用Winform中用户自定义的控件呢?

如何从 C# 控制器重定向到 URL(带有自定义标头)

浏览器自定义协议

如何在 ASCX 页面上的 ASP 网站上从 C# 代码执行 url 调用?