首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Blazor用于非http(S)协议

将Blazor用于非http(S)协议
EN

Stack Overflow用户
提问于 2021-07-16 10:34:01
回答 1查看 113关注 0票数 0

我正在开发一个应用程序,它应该在自定义传输协议上运行,该协议与http非常相似,但在查询字符串的开头有一个package://前缀而不是http://。因此,对名为index.html的资源的查询将类似于package://resources/index.html

我想在这个环境中部署Blazor WebAssembly应用程序。问题是,一旦Blazor的index.html被加载,它就会加载blazor.webassembly.js,后者使用fetch()来加载blazor.boot.json。然而,fetch()似乎只适用于httphttps (不确定原因),我得到了这个错误:

代码语言:javascript
复制
    blazor.webassembly.js:1 Fetch API cannot load package://package_name/wwwroot/_framework/blazor.boot.json. 
URL scheme "package" is not supported.
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1 TypeError: Failed to fetch
    at Function.<anonymous> (blazor.webassembly.js:1)
    at blazor.webassembly.js:1
    at Object.next (blazor.webassembly.js:1)
    at blazor.webassembly.js:1
    at new Promise (<anonymous>)
    at blazor.webassembly.js:1
    at Function.initAsync (blazor.webassembly.js:1)
    at blazor.webassembly.js:1
    at blazor.webassembly.js:1
    at Object.next (blazor.webassembly.js:1) 

我在想,也许用一个在内部使用XMLHttpRequest的函数覆盖fetch会有所帮助,但我不确定这在js中是否可行。总而言之,我想知道如何让Blazor在一个应用程序中工作,该应用程序运行在一个协议上,该协议不是httphttps,但除了方案命名之外非常相似。

EN

回答 1

Stack Overflow用户

发布于 2021-07-16 12:25:38

简而言之,这是不可能的。毕竟,每个浏览器都是一个HTTP客户端。虽然一些浏览器已经为特殊目的采用了其他协议,如用于web会议的RTC,但它们不支持开箱即用的自定义协议。可能有一种方法可以编写浏览器扩展,使其能够使用package://。或者,您可以通过操纵浏览器首选项或OS值,“诱使”浏览器对以"package://“开头的URI进行HTTP(s)调用。但同样需要您为每台应该执行您的应用程序的机器执行此操作。

第二个可能的问题存在于WASM应用程序中。如果WASM应用程序想要与另一个服务交互,您通常会使用HttpClient实例。Blazor WASM提供了一个处理程序,该处理程序使用浏览器fetch API进行这些调用。因为WASM应用程序在特殊的沙箱模式下运行,所以您不能像在普通.NET应用程序中那样访问所有系统级特性,包括(但不限于)套接字。因此,您也不能在这里实现客户传输协议。

如果您仍然希望使用Blazor应用程序并使用您的自定义协议进行“内部”通信,Blazor Server端可能是一个选择。在那里,您可以实现自己的传输协议(使用套接字和所有.NET类/库),同时使用标准技术与浏览器进行交互。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68402754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档