跳转至

Index

最小限的使用方法

以下是最小限必要的内容:

  • 准备一个带有 [BlazorPath] 属性的类。在此过程中,类定义需要使用 partial 属性。
  • 在该类中定义一个 const string 类型的常量。
  • 作为成员的属性,添加 [Page<PageComponent>]

BlazorPathHelper 会自动扫描满足上述条件的类定义,并生成 URL 构建函数。

WebPaths.cs
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
using BlazorPathHelper;
using Microsoft.AspNetCore.Components;

[BlazorPath]
public partial class WebPaths
{
  [Page<Home>]
  public const string Index = "/";
}

// 各组件的定义(实际上在各组件中描述)
public partial class Home : ComponentBase;
生成的代码
Auto Generated Code
1
2
3
// <auto-generated />
[Route("/")]
public partial class Home;

结果是,Home 组件会自动获得与 @page 属性相同的效果。

注意!

最后需要删除原本定义的 @page 属性。

参数与查询支持

如果 URL 中包含参数定义,则会自动添加 [Parameter] 属性。

WebPaths.cs
1
2
3
4
5
6
7
8
using BlazorPathHelper;

[BlazorPath]
public partial class WebPaths
{
  [Page<Counter>]
  public const string CounterWithState = "/counter/{count:int}";
}
生成的代码
Auto Generated Code
1
2
3
4
5
6
7
// <auto-generated />
[Route("/counter/{count:int}")]
public partial class Counter
{
  [Parameter]
  public int Count { get; set; }
}

同样,通过添加 Query<QueryRecord> 属性,可以自动添加 [SupplyParameterFromQuery] 属性。

WebPaths.cs
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
using BlazorPathHelper;

[BlazorPath]
public partial class WebPaths
{
  [Query<QueryRecord>, Page<Counter2>]
  public const string CounterWithQuery = "/counter/query";
}

public record QueryRecord(string query = "hello", int page = 0, bool? opt = null);
生成的代码
Auto Generated Code
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// <auto-generated />
[Route("/counter/query")]
public partial class Counter2
{
  [SupplyParameterFromQuery]
  public string Query { get; set; }

  [SupplyParameterFromQuery]
  public int Page { get; set; }

  [SupplyParameterFromQuery]
  public bool? Opt { get; set; }
}

也支持查询名称的缩写。

WebPaths.cs
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
using BlazorPathHelper;

[BlazorPath]
public partial class WebPaths
{
  [Query<QueryRecord>, Page<Counter3>]
  public const string CounterWithQuery = "/counter/query";
}

public record QueryRecord
{
  [SupplyParameterFromQuery(Name = "q")]
  public string Query { get; init; } = "hello";

  [SupplyParameterFromQuery(Name = "p")]
  public int Page { get; init; } = 0;

  [SupplyParameterFromQuery(Name = "o")]
  public bool? Opt { get; init; }
}
生成的代码
Auto Generated Code
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// <auto-generated />
[Route("/counter/query")]
public partial class Counter3
{
  [SupplyParameterFromQuery(Name = "q")]
  public string Query { get; set; }

  [SupplyParameterFromQuery(Name = "p")]
  public int Page { get; set; }

  [SupplyParameterFromQuery(Name = "o")]
  public bool? Opt { get; set; }
}

工作原理

TODO