クエリサポート
最小限の使用方法¶
最小限必要なものは以下の内容です。
[BlazorPath]
属性を付与したクラスを用意します。この際、クラス定義にはpartial
属性が必要です。- そのクラス内のメンバーとして
const string
型の定数を定義します。 - メンバーの属性として、
[Query<QueryClass>]
を付与します。
URLビルダー関数を生成する過程で、[Query<QueryClass>]
の定義を元にクエリ対応版の関数が生成されます。
WebPaths.cs | |
---|---|
1 2 3 4 5 6 7 8 |
|
注意!
QueryRecord
クラスは、.cs
ファイルに記述してください。
SourceGeneratorの仕様上、.razor
ファイルに記述することはできません。
推奨: パラメータの初期値を明確にする
各パラメータはデフォルト値を指定するか、nullableにすることを推奨します。(クエリパラメータが指定されなかった場合のことを考慮する必要があるはずです)
生成されたコード
Auto Generated Code | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
仕組み¶
[Query<QueryClass>]
属性を付与したメンバーに対して、以下の関数が生成されます。
Auto Generated Code | |
---|---|
1 2 3 4 5 6 |
|
上記の生成されたコードを見ると分かる通り、QueryRecord
クラスの各プロパティをクエリパラメータとして展開されています。
この関数を生成する際に、BlazorPathHelperが内部で行っている内容は以下の通りです。
[Page<QueryClass>]
属性が付与されているかどうかを確認- 指定されている場合は、
QueryClass
で定義されているプロパティを抽出- メンバーも使用できるはずですが、推奨しません。
- 各プロパティごとに、
ToEscapedStrings
関数を呼び出し、クエリパラメータを生成- 例えば上記の場合は、
"query=hello"
,"page=0"
,"opt=true"
のような文字列が生成されます。
- 例えば上記の場合は、
- 生成されたクエリパラメータを
BuildQuery
関数に渡し、クエリ文字列を生成- 上記の場合、
"?query=hello&page=0&opt=true"
のような文字列が生成されます。 - 例えば
opt=null
の場合は、"?query=hello&page=0"
のようになり、opt
パラメータは出力されません。
- 上記の場合、
入れ子プロパティはサポートされていません
上記の定義の通り、実際にはクラス自体を復元しているわけではなく、一度プロパティを抽出しています。
そのため、現在入れ子プロパティはサポートされていません。
クエリ名を変更する¶
[Query<QueryRecord>]
属性を指定した場合、クエリ名はQueryRecord
のプロパティ名がそのまま使用されます。
クエリ名を変更したい場合は、[QueryName("shortName")]
属性を付与してください。
WebPaths.cs | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
対応している型¶
QueryClass
のプロパティとしては以下のような定義が可能です。
通常の型¶
クラスの定義例 | 出力されるクエリURLの例 |
---|---|
record QueryClass(int val1) |
"/?val1=5" |
record QueryClass(bool? flg1) |
"/?flg1=true", "/" |
これ以外でも、ToString()
が実装されておりBlazor側が復元できる型ならば、基本的には対応しているはずです。
配列¶
クラスの定義例 | 出力されるクエリURLの例 |
---|---|
record QueryClass(string[] arr) |
"/?arr=foo&arr=bar&arr=buz" |
string[]
の他にも、int[]
やbool[]
なども対応しています。
IEnumerable
やList
などはBlazor側が対応していないため、サポートされていません。