クエリサポート
最小限の使用方法¶
最小限必要なものは以下の内容です。
[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側が対応していないため、サポートされていません。