WinFormium 框架提供了一系列的资源控制器,您可以使用这些资源控制器来管理您的资源文件以方便浏览器加载。WinFormium 的资源控制器基于 CEF 的 CefSchemeHandlerFactory
和 CefResourceHandler
接口实现,并对其进行了封装,使其更易于使用。
资源控制器的原理是为一系列的资源文件源映射一个 Url 地址,这个 Url 地址可以是 http://
或 https://
协议,也可以是任意自定义的协议。当浏览器加载这个 Url 地址时,资源控制器会根据文件来源加载相应的资源文件。
但需要注意的是,资源控制器其本质是通过拦截浏览器的请求并返回资源文件流来实现的,因此资源控制器提供的资源只能用于当前 WinFormium 应用程序进程,在进程外是无法访问的,这跟在本地运行一个 Web Server (例如:IIS、Nginx 等)有本质区别。比如您注册了 https://my.resource.local
这样一个地址,你可以在当前 WinFormium 应用程序中访问这个地址,但是在其他应用程序中是无法访问的,即使是在同一台电脑上。
目前 WinFormium 框架提供了以下资源控制器:
使用 .NET 的程序集作为资源文件的来源,可以将各种 HTML、CSS、JavaScript、图片等文件嵌入到您的 .NET 程序集中,然后使用嵌入式文件资源控制器来加载这些文件。
使用本地某个文件夹内的文件作为资源文件的来源,可以将各种 HTML、CSS、JavaScript、图片等文件放置到任意文件夹中,然后使用文件资源控制器来加载这些文件。
使用最接近 ASP.Net WebApi 的编码方式为前端提供数据类型的资源,您可以根据需求编写数据服务,并在数据服务中定义行为方法,并为数据服务或行为方法定义路由,这样前端就可以通过路由来访问这些数据接口了。
使用代理映射资源控制器可以将一个 Url 地址映射到另一个 Url 地址,您可以简单的将其理解为一个 Url 的重定向,在实际开发中,使用代理映射资源可以解决如跨域访问、API 接口映射等问题。
您可以在 WinFormium 应用程序创建阶段使用 AppBuilder
来注册资源控制器,也可以在 WinFormium 应用程序配置阶段使用 WinFormiumStartup
类的 ConfigureServices
以配置服务的方式来注册资源控制器。
AppBuilder
class Program
{
[STAThread]
static void Main(){
var builder = WinFormiumApp.CreateBuilder();
var app = builder
//...
.UseLocalFileResource(new LocalFileResourceOptions
{
Scheme = "http",
DomainName = "files.app.local",
PhysicalFilePath = "<RESOURCE_FILES_DIR>"
})
.build();
app.Run();
}
}
WinFormiumStartup
class MyApp : WinFormiumStartup
{
//...
public override void ConfigureServices(IServiceCollection services)
{
//...
services.AddLocalFileResource(new LocalFileResourceOptions
{
Scheme = "http",
DomainName = "files.app.local",
PhysicalFilePath = "<RESOURCE_FILES_DIR>"
});
//...
}
}
在上一节的示例中,我们注册了一个本地文件资源控制器(以两种不同方式),这个资源控制器的 Url 地址为 http://files.app.local
,它的资源文件来源于本地的 <RESOURCE_FILES_DIR>
文件夹。
在 WinFormium 窗体中,您可以使用该 Url 访问到指定文件夹中的资源文件。例如访问:http://files.app.local/index.html
,本地文件资源控制器将把该地址映射到本地文件 <RESOURCE_FILES_DIR>\index.html
。如果有多级目录,例如:http://files.app.local/subdir/index.html
,则本地文件资源控制器将把该地址映射到本地文件 <RESOURCE_FILES_DIR>\subdir\index.html
。
class MyWindow : Formium
{
public MyWindow()
{
Url = "http://files.app.local/"; // 此处不用特意指定 index.html,因为资源控制器会自动映射到 index.html,
// 这是通过 ResourceSchemeHandlerOptions 的 DefaultFileName 属性实现的。
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。