使用 Segment 功能
Source: Dev.to
概述
Segment 属性可以应用于 ASPX 页面。启用后,位于 .aspx 文件之后的任何路径部分都会被视为 段(segments),并路由到同一执行页面。该功能让你无需查询字符串即可完全控制 URL 路径。
在页面上启用 Segment
...
示例路径
如果在 /page/about.aspx 上启用了 Segment
/page/about.aspx/segment1/segment2/.../segmentN
文件 /page/about.aspx 仍然会被执行,额外的部分会作为段提供。
如果在 /page/about/Default.aspx 上启用了 Segment
以下两种 URL 都可工作:
/page/about/Default.aspx/segment1/segment2/.../segmentN
/page/about/segment1/segment2/.../segmentN
访问 Segment 值
段采用从零开始的索引。
// 给定 URL: /page/about/segment1/segment2/segment3
Segment.GetValue(0) // 返回 "segment1"
Segment.GetValue(1) // 返回 "segment2"
Segment.GetValue(2) // 返回 "segment3"
在视图中(Razor 风格)
segment 1 is: @Segment.GetValue(0)
segment 2 is: @Segment.GetValue(1)
在传统 ASPX 语法中
segment 1 is:
segment 2 is:
在 Code‑Behind 中
using CodeBehind;
namespace YourProjectName
{
public partial class DefaultController : CodeBehindController
{
public void PageLoad(HttpContext context)
{
Write(Segment.GetValue(0));
Write(Segment.GetValue(1));
}
}
}
检查 Segment 是否存在
@if (!Segment.Exist(0))
{
Value does not exist
}
与 MVC 路由的交互
在默认的 MVC 配置中,Segment 功能会自动为控制器路由启用。
using CodeBehind;
public partial class User : CodeBehindController
{
public void PageLoad(HttpContext context)
{
// path: /user/{id}
Write(Segment.GetValue(0));
}
}
将 ASPX 文件重写为目录
CodeBehind 框架可以将 .aspx 文件路径重写为目录名称。启用该选项后,省略 .aspx 扩展名的路由会被视为目录路径。
# CodeBehind options (do not change order)
rewrite_aspx_file_to_directory=true
示例
- 将
/page/contact.aspx访问为/page/contact - 仍然可以追加段:
/page/contact/segment1/segment2/.../segmentN
注意: 启用此重写不会增加额外的处理开销。
限制
如果在某个特定文件上启用了 Segment,则其子目录中的 ASPX 视图文件将不再可访问。
例如,在 /page/about/Default.aspx 上启用了 Segment 后,路径 /page/about/license/Default.aspx 将无法访问。
资源
- CodeBehind 在 GitHub 上:
- CodeBehind NuGet 包:
- CodeBehind 文档页面: