代码拉取完成,页面将自动刷新
---
id: httpstaticpageplugin
title: 静态页面插件
---
### 定义
命名空间:TouchSocket.Http <br/>
程序集:[TouchSocket.Http.dll](https://www.nuget.org/packages/TouchSocket.Http)
## 一、说明
静态页面功能是指`Web`服务器通过`HTTP`(超文本传输协议)或`HTTPS`(安全的超文本传输协议)向客户端(通常是浏览器)提供预定义的内容。这些内容通常包括HTML文件、CSS样式表、JavaScript脚本以及图片等多媒体资源。与动态页面不同,静态页面在服务器端不会进行任何处理或计算;它们是以文件形式存储在服务器上的,并且当用户请求时,服务器直接将这些文件发送给客户端。
## 二、静态页面的特点
1. **加载速度快**:由于服务器不需要执行任何脚本来生成页面内容,因此响应速度通常更快。
2. **易于维护**:对于内容不经常变化的网站,使用静态页面可以减少维护成本,因为无需担心后端逻辑的更新和数据库管理等问题。
3. **成本效益**:对于访问量较小的站点,使用静态页面可以节省服务器资源和带宽,降低运营成本。
## 三、静态页面的使用场景
- **个人博客**:如果博主主要发布文字内容,且更新频率不高,那么采用静态页面构建个人博客是一个不错的选择。
- **企业介绍**:对于那些只需要展示公司信息、联系方式等基本内容的企业网站来说,静态页面能够满足需求同时保持简洁高效。
- **项目展示**:艺术家、设计师等可以通过静态页面来创建个人作品集,以直观地向潜在客户展示自己的能力和风格。
总之,静态页面因其简单、快速和安全的特性,在特定的应用场景下具有明显优势。然而,对于需要频繁更新内容或实现复杂交互功能的网站,则可能更适合选择动态页面技术。
## 四、使用
### 4.1 常规使用
在创建`HttpService`实例后,只需要使用`UseHttpStaticPage`插件,然后指定根文件夹路径即可。
```csharp showLineNumbers
var service = new HttpService();
var config = new TouchSocketConfig();
config.SetListenIPHosts(new IPHost[] { new IPHost(7789) })
.ConfigurePlugins(a =>
{
a.UseHttpStaticPage()//添加静态页面文件夹
.AddFolder("../../../../../api");
});
await service.SetupAsync(config);
await service.StartAsync();
Console.WriteLine("Http服务器已启动");
```
:::tip 提示
`UseHttpStaticPage`插件可以多次添加,也可以添加多个文件夹。
:::
### 4.2 请求资源定向
在使用`UseHttpStaticPage`插件时,可以指定请求资源定向。例如,当请求的`URL`为`/api`时,将重定向到`/api/index.html`。
```csharp {4-7} showLineNumbers
a.UseHttpStaticPage()
.SetNavigateAction(request =>
{
if (request.RelativeURL.EndsWith("/"))
{
return $"{request.RelativeURL}/index.html";
}
//此处可以设置重定向
return request.RelativeURL;
})
.AddFolder("api/");
```
:::info 信息
默认情况下,会将`/`、`/index`都定向到`/index.html`。
:::
### 4.3 响应配置
可以通过配置响应头,例如添加自定义头。
```csharp {2-5} showLineNumbers
a.UseHttpStaticPage()
.SetResponseAction(response =>
{
//可以设置响应头
})
.AddFolder("api/");
```
### 4.4 配置ContentType
默认情况下,会将常见的文件后缀名映射到对应的`ContentType`。例如,`.html`文件会被映射为`text/html`。详情请见[ContentTypeMapper](https://gitee.com/RRQM_Home/TouchSocket/blob/master/src/TouchSocket.Http/StaticPage/FileExtensionContentTypeProvider.cs)。
但是,也可以通过配置`ContentTypeMapper`来覆盖默认的映射关系。
```csharp {2-5} showLineNumbers
a.UseHttpStaticPage()
.SetContentTypeProvider(mapper =>
{
mapper.Add(".txt", "text/plain");
})
.AddFolder("api/");
```
:::info 信息
在一些浏览器中,可能会出现编码错误的问题,可以通过设置`ContentTypeMapper`来修正。例如,将`.txt`文件映射为`text/plain; charset=UTF-8`,这样就不会出现乱码了。
:::
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。